func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2050;   int p[N], id[N], rmd[N], P[N], n;   int qry(vector<int> vec) {     cout <<  ?   << vec.size() <<    ;     for (auto t : vec) cout << t <<    ;     cout << endl, fflush(stdout);     int ok;     cin >> ok;     return ok;   }   int query(int x) {     vector<int> vec;     for (int i = 1; i <= n; ++i)       if (!p[i] && x != i) vec.push_back(i);     return qry(vec);   }   void query(int x, int y, int xx, int yy) {     for (int i = 1; i <= n; ++i)       if (!id[x] && !p[i] && rmd[i] == y) {         if (query(i)) id[x] = i;       } else if (!id[xx] && !p[i] && rmd[i] == yy)         if (query(i)) id[xx] = i;     p[id[x]] = x, p[id[xx]] = xx;   }   int main() {     cin >> n;     query(1, 0, n, 0);     for (int t = 2, l = 2, r = n - 1; l <= r; t <<= 1) {       for (int i = 1; i <= n; ++i)         if (!p[i]) {           vector<int> vec;           for (int j = 1; j <= t; ++j)             if (j % t != rmd[i]) vec.push_back(id[j]);           vec.push_back(i);           if (qry(vec)) rmd[i] += t >> 1;         }       while (l <= 2 * t && l <= r) query(l, l % t, r, r % t), ++l, --r;     }     if (p[1] * 2 > n)       for (int i = 1; i <= n; ++i) p[i] = n - p[i] + 1;     cout <<  !  ;     for (int i = 1; i <= n; ++i) cout << p[i] <<    ;     cout << endl, fflush(stdout);     return 0;   }   