~cpp
// 10182 - Bee Maja
#include <iostream>
using namespace std;
#define MAXN 100000
typedef struct {
int x;
int y;
}Coord;
Coord cord[MAXN+1];
void set_coord(int& n, const Coord curCoord)
{
if (n <= MAXN)
cord[n++] = curCoord;
}
void go_down(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.y++;
set_coord(n,curCoord);
}
}
void go_left_up(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.x--;
set_coord(n,curCoord);
}
}
void go_up(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.y--;
set_coord(n,curCoord);
}
}
void go_right_up(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.x++;
curCoord.y--;
set_coord(n,curCoord);
}
}
void go_right_down(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.x++;
set_coord(n,curCoord);
}
}
void go_left_down(const int len, int& n, Coord& curCoord)
{
for (int i = 0; i < len; i++)
{
curCoord.x--;
curCoord.y++;
set_coord(n,curCoord);
}
}
void cruise_comb(const int len, int& n, Coord& curCoord)
{
go_down(1, n, curCoord);
go_left_down(len-1, n, curCoord);
go_left_up(len, n, curCoord);
go_up(len, n, curCoord);
go_right_up(len, n, curCoord);
go_right_down(len, n, curCoord);
go_down(len, n, curCoord);
}
void convert_coord()
{
int length = 1;
Coord curCoord;
int n = 2;
curCoord.x = curCoord.y = 0;
cord[1].x = cord[1].y = 0;
while (n <= MAXN)
{
cruise_comb(length++, n, curCoord);
}
}
inline void show(int in)
{
cout << cord[in].x << " " << cord[in].y << endl;
}
int main()
{
int in;
convert_coord();
while (cin >> in)
show(in);
return 0;
}