#include <iostream>
#include <string.h>
#include <vector>
using namespace std;

constexpr long long mx = 100000000;

vector<bool> sieve;
vector<bool> seen;
vector<char> nb;

constexpr int wanted = 200;
long long a[wanted];
long long u = 0;

int main() {
	sieve.resize(mx);
	seen.resize(mx);
	nb.resize(mx);
	for (int n=0; n<wanted; n++) {
		a[n] = -1;
	}

	a[0] = 1;

	for (long long n=2; n<mx; n++) {
		if (!sieve[n]) {
			for (long long m=n; m<mx; m+=n) {
				sieve[m] = true;
			}

			for (long long k=1;; k++) {
				long long pk3 = n + k*k*k;
				if (pk3 >=mx) {
					break;
				} else if (nb[pk3]<wanted) {
					nb[pk3]++;
				}
			}
		}

		if (nb[n]<wanted && a[nb[n]]<0) {
			a[nb[n]] = n;
			while (a[u]>=0) {
				cout << u << ' ' << a[u] << endl;
				u++;
				if (u==wanted) {
					goto theEnd;
				}
			}
		}
	}

theEnd:
	return 0;
}