func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e5 + 10;   const int MOD = 1e9 + 7;   const int INF = 0x3f3f3f3f;   int N, M;   int a[110];   int b[110];   int sum[110];   int num[110][30];   char ans[110];   void solve(int n) {     string temp;     memset(a, 0, sizeof(a));     memset(b, 0, sizeof(b));     memset(sum, 0, sizeof(sum));     cout <<  ? 1   << n << endl;     cout.flush();     for (int i = n * (n + 1) / 2; i > 0; i--) {       cin >> temp;       for (int j = 0; j < temp.size(); j++) {         a[temp.size()] += temp[j] -  a ;       }     }     cout <<  ? 1   << n - 1 << endl;     cout.flush();     for (int i = n * (n - 1) / 2; i > 0; i--) {       cin >> temp;       for (int j = 0; j < temp.size(); j++) {         b[temp.size()] += temp[j] -  a ;       }     }     for (int i = 1; i <= n; i++) {       sum[i] = a[i] - b[i];       ans[n - i] = sum[i] - sum[i - 1] +  a ;     }   }   int main() {     string temp;     int limit;     int now;     while (~scanf( %d , &N)) {       if (N <= 3) {         char c;         for (int i = 1; i <= N; i++) {           cout <<  ?   << i <<     << i << endl;           cout.flush();           cin >> c;           ans[i - 1] = c;         }       } else {         memset(num, 0, sizeof(num));         limit = (N + 1) >> 1;         solve(limit);         cout <<  ?   << 1 <<     << N << endl;         cout.flush();         for (int i = N * (N + 1) / 2; i > 0; i--) {           cin >> temp;           for (int j = 0; j < temp.size(); j++) {             num[temp.size()][temp[j] -  a ]++;           }         }         for (int i = N; i >= limit; i--) {           for (int j = 1; j <= min(N - i + 1, limit); j++) {             now = j;             num[i][ans[j - 1] -  a ] -= now;           }           for (int j = now + 1; j <= limit; j++) {             num[i][ans[j - 1] -  a ] -= now;           }         }         for (int i = N; i > limit; i--) {           for (int j = 0; j < 30; j++) {             if (num[i][j] / (N - i + 1) * (N - i + 2) != num[i - 1][j]) {               ans[i - 1] = j +  a ;               for (int k = i - 1; k >= limit; k--) {                 num[k][j] -= N - i + 1;               }               break;             }           }         }       }       ans[N] =   0 ;       printf( ! %s n , ans);       cout.flush();     }     return 0;   }   