#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 == 3) printf("%d\n%d\n%d\n", 1, 4, 1 ^ 3 ^ 4); 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 == 3) { s.insert(1); s.insert(4); s.insert(1 ^ 3 ^ 4); } 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 - 2) { int v = rnd() % 100000 + 1; if (v != x && !s.count(v)) { r ^= v; s.insert(v); } } if (r != x && r >= 1 && r <= 100005 && !s.count(r)) { s.insert(r); s.insert(x); 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; }