#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline long long squ(T x) {
  return (long long)x * x;
}
template <typename T>
inline bool chkmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
inline bool chkmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
inline T read() {
  T sum = 0, fg = 1;
  char c = getchar();
  for (; !isdigit(c); c = getchar())
    if (c == '-') fg = -1;
  for (; isdigit(c); c = getchar()) sum = (sum << 3) + (sum << 1) + (c ^ 0x30);
  return fg * sum;
}
const int maxn = 100 + 10;
inline void query(int l, int r) {
  if (l > r) return;
  printf("? %d %d\n", l, r), fflush(stdout);
}
string S, T;
map<string, int> Cnt;
vector<string> suf;
int n, m, cnt[maxn][26];
inline bool cmp(const string &a, const string &b) {
  return a.size() < b.size();
}
int main() {
  n = read<int>(), m = n >> 1;
  if (n == 1) {
    query(1, n), cin >> T;
    cout << "! " << T << endl;
    return 0;
  }
  query(1, m - 1);
  for (int i = m * (m - 1) / 2; i >= 1; i--) {
    cin >> T, sort(T.begin(), T.end());
    ++Cnt[T];
  }
  query(1, m);
  for (int i = m * (m + 1) / 2; i >= 1; i--) {
    cin >> T, sort(T.begin(), T.end());
    if (Cnt[T])
      --Cnt[T];
    else
      suf.push_back(T);
  }
  sort(suf.begin(), suf.end(), cmp);
  S = "#";
  for (int i = suf.size() - 1; i > 0; i--) {
    string df = suf[i].substr(suf[i].size() - 1, 1);
    for (int j = 0, e = suf[i - 1].size(); j < e; j++)
      if (suf[i][j] != suf[i - 1][j]) {
        df = suf[i].substr(j, 1);
        break;
      }
    S += df;
  }
  S += suf[0];
  query(1, n);
  for (int i = n * (n + 1) / 2; i >= 1; i--) {
    cin >> T;
    for (int j = T.size() - 1; ~j; j--) ++cnt[T.size()][T[j] - 'a'];
  }
  for (int i = m + 1; i <= n; i++) {
    for (int j = n - i + 1; j < i; j++) --cnt[i][S[j] - 'a'];
    for (int j = 0; j < 26; j++) {
      cnt[i][j] -= cnt[i + 1][j];
      if (cnt[i][j]) {
        T = "a", T[0] += j, S += T;
        break;
      }
    }
  }
  S.erase(0, 1);
  cout << "! " << S << endl;
  return 0;
}
