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

#define MAX (1LL<<33)
bitset<MAX> *seen;

#define CAN (1LL<<26)
long long cc[CAN];

long long other(long long v) {
	int w = 1;
	for (long long b=1;; b<<=1) {
		if ((v & b)==0) {
			if (w==CAN) {
				exit(1);
			}

			for (int k=0; k<w; k++) {
				cc[w+k]=b + cc[k];

				if (cc[w+k]>=MAX) {
					exit(2);
				}

				if (!seen->test(cc[w+k])) {
					return cc[w+k];
				}
			}

			w<<=1;
		}
	}
}

int main() {
	seen = new bitset<MAX>;

	cc[0] = 0;

	long long m = 0;
	long long mx = 0;

	long long v=1;
	for (long long n=1; m<1000; n++) {
		if (mx<v) {
			mx=v;
			m++;

			cout << m << ' ' << mx << endl;
		}

		seen->set(v);
		v = other(v);
	}

	delete seen;
	return 0;
}