func_code_string: #include <bits/stdc++.h>   using namespace std;   bool dif[10];   int p[1005], n, x, y, ans1, ans2;   inline void chk(int p) {     int i, sz = 0, res;     for (i = 1; i <= n; i++) {       if (i & (1 << p)) {         sz++;       }     }     if (sz == 0) {       dif[p] = 0;       return;     }     printf( ? %d  , sz);     for (i = 1; i <= n; i++) {       if (i & (1 << p)) {         printf( %d  , i);       }     }     printf(  n );     fflush(stdout);     scanf( %d , &res);     if (sz & 1) {       if (res == x) {         dif[p] = 0;         return;       }       if (res == y) {         dif[p] = 1;         return;       }     } else {       if (res == (x ^ y)) {         dif[p] = 1;         return;       }       if (res == 0) {         dif[p] = 0;         return;       }     }   }   inline bool ok(int pr) {     int res, i;     printf( ? %d  , pr);     for (i = 1; i <= pr; i++) {       printf( %d  , p[i]);     }     printf(  n );     fflush(stdout);     scanf( %d , &res);     if (pr & 1) {       if (res == x) {         return 0;       }       if (res == y) {         return 1;       }     } else {       if (res == (x ^ y)) {         return 1;       }       if (res == 0) {         return 0;       }     }   }   inline int get(int x) {     int i, cnt = 0;     for (i = 1; i <= n; i++) {       if (!(i & (1 << x))) {         continue;       }       p[++cnt] = i;     }     int l = 1, r = cnt;     while (l <= r) {       int mid = (l + r) >> 1;       if (ok(mid)) {         r = mid - 1;       } else {         l = mid + 1;       }     }     return p[l];   }   int main() {     int i;     scanf( %d%d%d , &n, &x, &y);     for (i = 9; i >= 0; i--) {       chk(i);     }     for (i = 9; i >= 0; i--) {       if (dif[i]) {         ans1 = get(i);         break;       }     }     ans2 = ans1;     for (i = 9; i >= 0; i--) {       if (dif[i]) {         ans2 ^= (1 << i);       }     }     printf( ! %d %d n , ans2, ans1);     fflush(stdout);     return 0;   }   