#include #include int gcd(int a, int b) { while (a != 0) { int c = a; a = b%a; b = c; } return (b<0) ? -b : +b; } #define MAX (1<<30) bool *seen = 0; int unseen = 1; int main() { seen = new bool[MAX]; memset(seen, 0, MAX*sizeof(*seen)); int pp, p, t=1, e=0; for (int n=1;; n++) { int v; if (n<=3) { v = n; } else { v = -1; for (int w=unseen; w1) { v = w; break; } } if (v<0) { goto theEnd; } } if (v==t) { printf("%d %d\n", e, n); fflush(stdout); t*=2; e++; } seen[v] = true; while (seen[unseen]) { unseen++; } pp = p; p = v; } theEnd: delete[] seen; return 0; }