#include #include constexpr long long mx = 1LL << 14; // greatest possible value std::vector seen; // A367262(n)'s std::vector xeen; // A367262(0) XOR ... XOR A367262(n)'s constexpr long long len = 1LL << 13; // number of terms constexpr long long unknown = -1; // unknown value std::vector inv; // A367263 int main() { seen.resize(mx); xeen.resize(mx); inv.resize(len, unknown); long long t = 0; // A367262(0) XOR ... XOR A367262(k) long long u = 0; // least value not yet in the sequence long long n = 0; // index of next value to display for (long long k=0;; k++) { 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++; } if (v < len) { inv[v] = k; while (inv[n]!=unknown) { std::cout << n << ' ' << inv[n] << std::endl; ++n; if (n==len) { goto theEnd; } } } break; } } } theEnd: return 0; }