#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2100;
const int inf = 0x3f3f3f3f;
const int mod = 998244353;
int t, n, m, k, x, a[101];
char str[101], ans[101];
map<string, int> mp;
void query(int l, int r) { cout << "? " << l << " " << r << endl; }
int main() {
  cin >> n;
  if (n <= 3) {
    for (int i = 1; i <= n; i++) {
      query(i, i);
      cin >> str;
      a[i] = str[0];
    }
    cout << "! ";
    for (int i = 1; i <= n; i++) {
      cout << char(a[i]);
    }
    cout << endl;
    return 0;
  }
  m = n / 2;
  query(1, m);
  for (int i = 0; i < (m + 1) * m / 2; i++) {
    cin >> str;
    x = strlen(str);
    for (int j = 0; j < x; j++) {
      a[x] += (int)str[j];
    }
  }
  query(2, m);
  for (int i = 0; i < (m - 1) * m / 2; i++) {
    cin >> str;
    x = strlen(str);
    for (int j = 0; j < x; j++) {
      a[x] -= (int)str[j];
    }
  }
  for (int i = m; i > 0; i--) {
    a[i] -= a[i - 1];
    ans[i] = (char)a[i];
  }
  query(1, n);
  for (int i = 0; i < (n + 1) * n / 2; i++) {
    cin >> str;
    x = strlen(str);
    if (x > m) {
      for (int j = 0; j < x; j++) {
        a[x] += (int)str[j];
      }
    }
  }
  for (int i = m + 1; i <= n; i++) {
    x = n - i + 1;
    for (int j = 1; j <= m; j++) {
      a[i] -= a[j] * min(j, x);
    }
  }
  for (int i = m + 1; i < n; i++) {
    a[i] -= a[i + 1];
  }
  for (int i = n; i > m + 1; i--) {
    a[i] -= a[i - 1];
    ans[i] = char(a[i]);
  }
  ans[m + 1] = char(a[m + 1]);
  cout << "! ";
  for (int i = 1; i <= n; i++) {
    cout << ans[i];
  }
  cout << endl;
  return 0;
}
