#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;
}
