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

#define MAX 1000000000LL
int *seen = 0;

#define MAXA	10000

int a[MAXA];
int unseen = 1;

int main() {
	seen = (int*) malloc(MAX * sizeof(int));
	if (seen==0) {
		fprintf(stderr, "*** out of memory\n");
		exit(1);
	}

	memset(seen, 0, MAX * sizeof(int));
	memset(a, 0, sizeof(a));

	int head = 1;
	for (int n=1; n<MAX; n++) {
		if ((n & head)==0) {
			head *= 2;
		}

		int v = 0;
		int rem = n;
		int eraser = head;
		while (rem) {
			int rrem = rem;
			while (rrem) {
				if (seen[rrem]==n) {
					break;
				}
				seen[rrem] = n;
				v++;

				rrem /= 2;
			}

			rem = rem & ~eraser;
			eraser /= 2;
		}

		if (v < MAXA) {
			if (a[v]==0) {
				a[v] = n;
				while (a[unseen]) {
					printf("%d %d\n", unseen, a[unseen]);
					fflush(stdout);
					unseen++;
				}
			}
		}
	}

	free(seen);
	seen = 0;

	return 0;
}