#include <stdio.h>
#include <string.h>

#define MAX 20241LL

bool ok[MAX];

void test(long long x, long long y, long long z) {
	long long k = x*x*x + y*y*y + z*z*z;
	long long n2 = x*x + y*y + z*z;

	if (k>=0 && k<MAX && n2<=k) {
		ok[k] = true;
	}
}

int main() {
	memset(ok, 0, sizeof(ok));

	for (long long x=0; x*x<MAX; x++) {
		for (long long y=0; x*x+y*y<MAX; y++) {
			for (long long z=0; x*x+y*y+z*z<MAX; z++) {
				test(+x,+y,+z);
				test(+x,+y,-z);
				test(+x,-y,+z);
				test(+x,-y,-z);
				test(-x,+y,+z);
				test(-x,+y,-z);
				test(-x,-y,+z);
				test(-x,-y,-z);
			}
		}
	}

	long long n = 0;
	for (long long k=0; k<MAX; k++) {
		if (ok[k]) {
			printf("%lld %lld\n", ++n, k);
			fflush(stdout);
		}
	}
}