#include #include std::vector seen(1); size_t unseen = 0; size_t other(size_t p) { seen[p] = true; while (unseen < seen.size() && seen[unseen]) { unseen++; } for (size_t v = unseen;; v++) { if (v == seen.size()) { seen.resize(2 * seen.size()); } if (!seen[v]) { size_t pv = p & v; if (pv==0 || pv==p) { return v; } } } } int main() { size_t v = 0; for (size_t n = 0; n <= 10'000; n++) { std::cout << n << ' ' << v << std::endl; v = other(v); } return 0; }