#include <iostream>
struct wektor {
	long long x = 0;
	long long y = 0;
};
wektor operator+(const wektor& lhs, const wektor& rhs) {
	return {lhs.x + rhs.x, lhs.y + rhs.y};
}
wektor& operator+=(wektor& lhs, const wektor& rhs) {
	return lhs = lhs + rhs;
}
wektor obroc_w_prawo(const wektor& v) {
	return {v.y, -v.x};
}
wektor obroc_w_lewo(const wektor& v) {
	return {-v.y, v.x};
}
wektor przesuniecia_dla_poteg_2[64];
void stablicuj_przesuniecia() {
	wektor przesuniecie {0, 1};
	for (int i = 0; i < 64; i++) {
		przesuniecia_dla_poteg_2[i] = przesuniecie;
		przesuniecie += obroc_w_prawo(przesuniecie);
	}
}
wektor rozwiaz(unsigned long long n, unsigned wykladnik = 63) {
	if (n == 0)
		return {};
	while (((n << 1) - 1) >> wykladnik == 0) {
		wykladnik--;
	}
	return przesuniecia_dla_poteg_2[wykladnik] 
		+ obroc_w_lewo(rozwiaz((1uLL << wykladnik) - n, wykladnik - 1));
}
int main() {
	stablicuj_przesuniecia();
	int t;
	std::cin >> t;
	for (int i = 0; i < t; i++) {
		unsigned long long n;
		std::cin >> n;
		wektor p = rozwiaz(n);
		std::cout << p.x << ' ' << p.y << '\n';
	}
	return 0;
}