#include #include #include

using namespace std;

struct mov { int x, y, d; mov() { x = y = d = 0; } void rot(); };

const int maxl = 33;

int le[maxl], t; mov a[maxl], b[maxl];

void mov :: rot() { int xo(x), yo(y); y = xo, x = -yo; d = (d + 1) & 3; }

mov operator +(mov a, mov b) { mov r; for (int i = 0; i < a. d; ++ i) b. rot(); r. x = a. x + b. x, r. y = a. y + b. y; r. d = b. d; return r; }

void pre() { a[0]. x = 1, a[0]. y = 0, a[0]. d = 1; b[0]. x = 1, b[0]. y = 0, b[0]. d = 3; le[0] = 1; for (int i = 1; le[i - 1] < 1e9; t = ++ i) { le[i] = le[i - 1] * 2 + 1; a[i] = a[i - 1] + a[0] + b[i - 1]; b[i] = a[i - 1] + b[0] + b[i - 1]; } }

mov ans;

void DFS(int l, int x, int r) { if (!l) { if (!r) ans = ans + a[0]; else ans = ans + b[0]; } else if (x <= le[l - 1]) { DFS(l - 1, x, 0); } else if (x >= le[l - 1] + 1) { if (!r) ans = ans + a[l - 1] + a[0]; else ans = ans + a[l - 1] + b[0]; if (x > le[l - 1] + 1) DFS(l - 1, x - le[l - 1] - 1, 1); } }

void calc(int x) { if (x) { ans = mov(); DFS(t, x, 0); printf("(%d,%d)\n", ans. x, ans. y); } else puts("(0,0)"); }

int main() { #ifdef LAEKOV_LOCAL freopen(".in", “r”, stdin); #endif

int x;
pre();
while (scanf("%d", &x), x != -1)
	calc(x);

}