func_code_string: #include <bits/stdc++.h>   using namespace std;   int fx[] = {-1, 1, 0, 0};   int fy[] = {0, 0, 1, -1};   int dx[] = {-1, 1, 0, 0, 1, 1, -1, -1};   int dy[] = {0, 0, 1, -1, 1, -1, -1, 1};   int cx[] = {1, 1, 2, 2, -1, -1, -2, -2};   int cy[] = {2, -2, 1, -1, 2, -2, 1, -1};   const int N = 1 << 11;   int n;   int ans[N + 1];   int ask(int p, int q) {     printf( ? %d %d n , p, q);     fflush(stdout);     int x;     scanf( %d , &x);     return x;   }   int value(int x) {     int ans = N - 1;     for (int i = 1; i <= 15; i++) {       int a = rand() % n + 1;       if (a == x) continue;       ans &= ask(x, a);     }     return ans;   }   void solve() {     ios::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     srand(2137);     scanf( %d , &n);     vector<int> v;     for (int i = 1; i <= n; i++) v.push_back(i);     random_shuffle(v.begin(), v.end());     pair<int, int> zero = {v[0], value(v[0])};     for (int i = 1; i <= n - 1; i++) {       int a = ask(zero.first, v[i]);       if ((a & zero.second) == a) zero = {v[i], value(v[i])};     }     for (int i = 1; i <= n; i++)       if (i != zero.first) ans[i] = ask(i, zero.first);     printf( !  );     for (int i = 1; i <= n; i++) printf( %d  , ans[i]);   }   signed main() {     solve();     return 0;   }   