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

#define MAX 100000000

long long prod[MAX];

#define WANTED 1000001
long long a[WANTED];
int u = 1;

int main() {
	memset(prod, 0, sizeof(prod));
	memset(a, 0, sizeof(a));

	int v = 1;
	int k = 0;
	int m = 0;
	long long p = -1;
	long long pp = -1;
	int f = 0;

	int r = 0;
	long long mx = -1;

	for (long long n=1; n<=1000000000000000000ll; n++) {
		for (int o=1;; o++) {
			int ov = o*v;

			if (ov>=MAX) {
				fprintf(stderr, "#the end\n");
				return 1;
			}

			int old = prod[ov];
			if (old+1<=ov) {
				if (!old && ov<WANTED) {
					a[ov]=n;
					while (a[u]) {
						if (mx<a[u]) {
							printf("%d %lld\n", ++r, mx=a[u]);
							fflush(stdout);
						}

						u++;
						if (u==WANTED) {
							return 0;
						}
					}
				}

				v=o;

				if (pp==ov) {
					// giant step - the sequence is 2-periodic for a while
					if ((ov-old)%2==0) {
						v = ov/o;
					}
					prod[ov] = ov;
					n += ov-old-1;
				} else {
					prod[ov] = old+1;
					pp = ov;
				}

				break;
			}
		}
	}

	return 0;
}