func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   set<pair<int, int> > s;   vector<int> od;   int p[512];   vector<int> v[512];   inline void dfs(int b, int pr = -1) {     od.push_back(b);     p[b] = pr;     auto it = s.lower_bound(make_pair(b, -1));     while (it != s.end() && (*it).first == b) {       if (it->second == pr) {         it = next(it);         continue;       }       dfs(it->second, b);       v[b].push_back(it->second);       v[it->second].push_back(b);       it = next(it);     }   }   bool us[512];   void init() {     for (int i = 0; i <= n; i++) {       v[i].clear();       us[i] = false;     }   }   int sz[512];   inline pair<int, int> cent(int b, int ALL, int pr) {     sz[b] = 1;     pair<int, int> ret = make_pair(INT_MAX, -1);     int mx = -1;     for (int go : v[b]) {       if (us[go]) continue;       if (go == pr) continue;       ret = min(ret, cent(go, ALL, b));       sz[b] += sz[go];       mx = max(mx, sz[go]);     }     mx = max(mx, ALL - sz[b]);     ret = min(ret, make_pair(mx, b));     return ret;   }   inline void er(int a, int b) {     s.erase(make_pair(a, b));     s.erase(make_pair(b, a));   }   inline void ins(int a, int b) {     s.insert(make_pair(a, b));     s.insert(make_pair(b, a));   }   bool ok(vector<int> &vv, int num, int root, int root2) {     cout << 1 << endl;     cout << root << endl;     cout << num + 1 << endl;     for (int j = 0; j <= num; j++) {       if (j) printf(   );       printf( %d , vv[j]);     }     puts(  );     cout << root2 << endl;     fflush(stdout);     int way;     scanf( %d , &way);     if (way == num + 1) {       return true;     }     return false;   }   inline void df(int b, int add) {     cent(b, 0, -1);     b = cent(b, sz[b], -1).second;     vector<int> z;     for (int go : v[b]) {       z.push_back(go);     }     us[b] = true;     int mint = 0;     int maxt = z.size();     if (z.size() && ok(z, 0, add, b) == false) {       maxt = mint;     }     while (mint + 1 < maxt) {       int mid = (mint + maxt) / 2;       if (ok(z, mid, add, b)) {         mint = mid;       } else {         maxt = mid;       }     }     if (maxt == z.size()) {       ins(b, add);       return;     }     if (us[z[maxt]] == false) {       df(z[maxt], add);       return;     }     er(z[maxt], b);     ins(z[maxt], add);     ins(add, b);   }   int zz[512];   vector<int> o;   bool cmp(int a, int b) { return zz[a] > zz[b]; }   int main() {     cin >> n;     zz[1] = n;     for (int i = 2; i <= n; i++) {       cout << 1 << endl;       cout << 1 << endl;       cout << n - 1 << endl;       for (int j = 2; j <= n; j++) {         if (j > 1) printf(   );         printf( %d , j);       }       puts(  );       printf( %d n , i);       fflush(stdout);       int a;       scanf( %d , &a);       zz[i] = a;     }     for (int i = 2; i <= n; i++) o.push_back(i);     sort(o.begin(), o.end(), cmp);     for (int i : o) {       od.clear();       init();       dfs(1);       reverse(od.begin(), od.end());       df(1, i);     }     puts( ANSWER );     for (auto it : s) {       if (it.first > it.second) continue;       printf( %d %d n , it.first, it.second);     }     return 0;   }   