#include <bits/stdc++.h>
using namespace std;
template <class T>
void read(T &u) {
  u = 0;
  char c = getchar();
  int flag = 0;
  while (c < '0' || c > '9') flag |= (c == '-'), c = getchar();
  while (c >= '0' && c <= '9')
    u = (u << 3) + (u << 1) + (c ^ 48), c = getchar();
  if (flag) u = -u;
}
template <class T>
void write(T u) {
  if (u < 0) printf("-"), u = -u;
  if (u < 10)
    putchar(48 + u);
  else
    write(u / 10), putchar(48 + u % 10);
}
void write(char u) { putchar(u); }
template <class T, class... Arg>
void read(T &u, Arg &...v) {
  read(u);
  read(v...);
}
template <class T, class... Arg>
void write(T u, Arg... v) {
  write(u);
  write(v...);
}
template <class T>
bool checkmin(T &a, T b) {
  return (b < a ? a = b, 1 : 0);
}
template <class T>
bool checkmax(T &a, T b) {
  return (b > a ? a = b, 1 : 0);
}
template <class T>
T _min(T a, T b) {
  return (a < b ? a : b);
}
template <class T>
T _max(T a, T b) {
  return (a > b ? a : b);
}
const int N = 105;
int vis[N];
int n, u, a[N];
void print(int l, int r) {
  cout << "? " << l << " " << r << endl;
  cout.flush();
}
void init() { cin >> n; }
string s, t;
void solve() {
  if (n <= 3) {
    string ans = "";
    for (int i = 1; i <= n; ++i) {
      print(i, i);
      cin >> s;
      ans += s;
    }
    cout << "! " << ans << endl;
    cout.flush();
    return;
  }
  u = n / 2;
  print(2, u);
  for (int i = 1; i <= (u - 1) * (u) / 2; ++i) {
    cin >> s;
    int l = (int)s.size(), tmp = 0;
    for (int p = 0; p < l; ++p) {
      tmp += s[p];
    }
    vis[l] -= tmp;
  }
  print(1, u);
  vector<int> v;
  for (int i = 1; i <= (u + 1) * (u) / 2; ++i) {
    cin >> s;
    int l = (int)s.size(), tmp = 0;
    for (int p = 0; p < l; ++p) {
      tmp += s[p];
    }
    vis[l] += tmp;
  }
  for (int i = 1; i <= u; ++i) {
    a[i] = (vis[i] - vis[i - 1]);
  }
  memset(vis, 0, sizeof vis);
  print(1, n);
  for (int i = 1; i <= n * (n + 1) / 2; ++i) {
    cin >> s;
    int l = (int)s.size(), tmp = 0;
    for (int p = 0; p < l; ++p) {
      tmp += s[p];
    }
    vis[l] += tmp;
  }
  for (int i = 1; i <= u; ++i) {
    a[n + 1 - i] = (vis[i] - vis[i - 1]) - (vis[i + 1] - vis[i]) - a[i];
  }
  if (n % 2 == 1) {
    a[u + 1] = vis[u + 1] - vis[u];
  }
  string ans = "";
  for (int i = 1; i <= n; ++i) {
    ans += (char)(a[i]);
  }
  cout << "! " << ans << endl;
  cout.flush();
}
int main() {
  int T = 1;
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  ;
  while (T--) {
    init();
    solve();
  }
  return 0;
}
