#include #include constexpr long long mx = 1LL << 14; std::vector seen; // a(n)'s std::vector xeen; // a(0) XOR ... XOR a(n)'s int main() { seen.resize(mx); xeen.resize(mx); long long t = 0; // a(0) XOR ... XOR a(n) long long u = 0; // least value not yet in the sequence for (long long n=0; n<=(1LL<<13); n++) { for (long long v=u;; v++) { if (v==mx) { goto theEnd; } if (!seen[v] && !xeen[t ^ v]) { t ^= v; seen[v] = true; xeen[t] = true; while (u < mx && seen[u]) { u++; } std::cout << n << ' ' << t << std::endl; break; } } } theEnd: return 0; }