func_code_string: #include <bits/stdc++.h>   using namespace std;   int fir[5000];   int sec[5000];   int init(int x, int y) {     printf( ? %d %d n , x, y);     fflush(stdout);     scanf( %d , &x);     return x;   }   void print(int sch, const vector<int> &ans) {     printf( ! n );     fflush(stdout);     printf( %d n , sch);     fflush(stdout);     for (int i = 0; i < ans.size(); i++) printf( %d  , ans[i]);     fflush(stdout);   }   int main() {     int n;     scanf( %d , &n);     for (int i = 0; i < n; i++) fir[i] = init(0, i);     for (int i = 0; i < n; i++) sec[i] = init(i, 0);     vector<int> ans;     int sch = 0;     for (int i = 0; i < n; i++) {       bool t = true;       int col[5000], p[5000], b[5000];       b[0] = i;       memset(col, 0, sizeof col);       for (int j = 0; j < n; j++) {         int x = sec[j] ^ b[0];         if (x >= n || col[x]) {           t = false;           break;         }         p[j] = x;         col[x]++;       }       if (t) {         memset(col, 0, sizeof col);         col[i]++;         for (int j = 1; j < n; j++) {           int x = fir[j] ^ p[0];           if (x >= n || col[x]) {             t = false;             break;           }           b[j] = x;           col[x]++;         }       }       if (t) {         for (int j = 0; j < n; j++)           if (j != b[p[j]]) t = false;       }       if (t) {         if (!sch) {           for (int j = 0; j < n; j++) ans.push_back(p[j]);         }         sch++;       }     }     print(sch, ans);     return 0;   }   