#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; }