#include #include #include #include using namespace std; int n, x; int main() { scanf("%d%d", &n, &x); if (n == 1) printf("%d\n", x); else if (n == 2) { if (x == 1) printf("%d\n%d\n", 2, 3); else printf("%d\n%d\n", 1, x ^ 1); } else if (n == 3) { if (x == 1) printf("%d\n%d\n%d\n", 2, 4, 7); else if (x == 2) printf("%d\n%d\n%d\n", 1, 4, 7); else if (x == 3) printf("%d\n%d\n%d\n", 1, 4, 6); else printf("%d\n%d\n%d\n", 1, 2, x ^ 1 ^ 2); } else { bool inv = false; if (n > 50002) { n = 100005 - n; x = 1 ^ x; inv = true; } mt19937 rnd(time(0)); unordered_set s; if (n == 0) { } else if (n == 1) { s.insert(x); } else if (n == 2) { if (x == 1) { s.insert(2); s.insert(3); } else { s.insert(1); s.insert(x ^ 1); } } else if (n == 3) { if (x == 1) { s.insert(2); s.insert(4); s.insert(7); } else if (x == 2) { s.insert(1); s.insert(4); s.insert(7); } else if (x == 3) { s.insert(1); s.insert(4); s.insert(6); } else { s.insert(1); s.insert(2); s.insert(x ^ 1 ^ 2); } } else { while (true) { s.clear(); int r = 0; while ((int)s.size() < n - 1) { int v = rnd() % 100005 + 1; if (!s.count(v)) { r ^= v; s.insert(v); } } int last = r ^ x; if (last >= 1 && last <= 100005 && !s.count(last)) { s.insert(last); break; } } } if (inv) { for (int i = 1; i <= 100005; ++i) { if (!s.count(i)) printf("%d\n", i); } } else { for (auto e : s) printf("%d\n", e); } } return 0; }