func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using pii = pair<int, int>;   using pll = pair<ll, ll>;   const int N = 325;   int n, s[N], sum[26][N], vc;   bitset<N> b[N];   char ans[N];   void addv(int s, int e) {     int flag = 0;     for (int i = s - 1, j = e - 1; i <= j; i++, j--) {       if (!flag) {         b[vc].reset();         flag = 1;       } else         b[vc] = b[vc - 1];       for (int k = i; k <= j; k++) b[vc].flip(k);       vc++;     }   }   int ref() {     int c = 0;     for (int i = 0; i < n; i++) {       for (int j = c + 1; j < vc; j++)         if (b[j][i]) {           swap(b[j], b[c]);           break;         }       if (!b[c][i]) continue;       for (int j = c + 1; j < vc; j++)         if (b[j][i]) b[j] ^= b[c];       c++;     }     if (c == n) {       for (int i = n - 1; i >= 0; i--) {         for (int j = 0; j < i; j++)           if (b[j][i]) b[j] ^= b[i];       }     }     return c;   }   void ask(int s, int e) {     printf( ? %d %d n , s, e);     fflush(stdout);     int cnt = (e - s + 1) * (e - s + 2) / 2;     char buf[N];     while (cnt--) {       scanf( %s , buf);       int k = strlen(buf);       if (k > (e - s + 2) / 2) continue;       for (int i = 0; i < k; i++) {         sum[buf[i] -  a ][vc + k - 1] ^= 1;       }     }     vc += (e - s + 2) / 2;   }   int main() {     cin >> n;     int aa, bb, cc;     int ra, rb, rc;     srand(time(0));     while (true) {       aa = rand() % n + 1;       bb = rand() % n + 1;       cc = rand() % n + 1;       if (aa * (aa + 1) / 2 + bb * (bb + 1) / 2 + cc * (cc + 1) / 2 >           ceil(0.777 * (n + 1) * (n + 1)) - 1)         continue;       ra = 1;       rb = rand() % (n - bb + 1) + 1;       rc = n - cc + 1;       vc = 0;       addv(ra, ra + aa - 1);       addv(rb, rb + bb - 1);       addv(rc, rc + cc - 1);       int ttt = ref();       if (ttt == n) break;     }     vc = 0;     ask(ra, ra + aa - 1);     ask(rb, rb + bb - 1);     ask(rc, rc + cc - 1);     for (int i = 0; i < 26; i++) {       vc = 0;       addv(ra, ra + aa - 1);       addv(rb, rb + bb - 1);       addv(rc, rc + cc - 1);       for (int j = 0; j < vc; j++) b[j][n] = sum[i][j];       ref();       for (int j = 0; j < n; j++)         if (b[j][n]) ans[j] = i +  a ;     }     printf( ! %s n , ans);     return 0;   }   