#include <bits/stdc++.h>
using namespace std;
int n, cnt[30], at, num[26][101], os[26][101], len[26][105];
string str;
char ans[205];
multiset<string> s1, s2;
char ms(const string& a, const string& b) {
  for (int i = 0; i < 26; i++) cnt[i] = 0;
  for (char e : b) ++cnt[e - 'a'];
  for (char e : a) --cnt[e - 'a'];
  for (int i = 0; i < 26; i++) {
    if (cnt[i]) return 'a' + i;
  }
}
vector<string> vec;
int main() {
  cin >> n;
  if (n / 2 >= 1) {
    cout << "? 1 " << (n / 2) << endl;
    for (int i = 1, p = (n / 2) * (n / 2 + 1) / 2; i <= p; i++) {
      cin >> str;
      sort(str.begin(), str.end());
      s2.insert(str);
    }
  }
  if (n / 2 - 1 >= 1) {
    cout << "? 1 " << (n / 2 - 1) << endl;
    for (int i = 1, p = (n / 2 - 1) * (n / 2) / 2; i <= p; i++) {
      cin >> str;
      sort(str.begin(), str.end());
      s1.insert(str);
    }
    for (string ss : s1) s2.erase(s2.find(ss));
  }
  string tmp = "";
  at = n / 2;
  for (string ss : s2) vec.push_back(ss);
  sort(vec.begin(), vec.end(),
       [&](string a, string b) { return a.length() < b.length(); });
  for (string ss : vec) ans[at--] = ms(tmp, ss), tmp = ss;
  for (int i = 1; i <= n / 2; i++) {
    for (int j = 0; j < 26; j++) {
      os[j][i] = os[j][i - 1] + (ans[i] == 'a' + j);
    }
  }
  cout << "? 1 " << n << endl;
  for (int i = 1, p = n * (n + 1) / 2, ll; i <= p; i++) {
    cin >> str;
    for (char e : str) ++len[e - 'a'][str.length()];
  }
  for (int i = 2; i <= (n + 1) / 2; i++) {
    for (int j = 0; j < 26; j++) {
      num[j][i] = len[j][i] - len[j][i - 1];
    }
  }
  for (int i = n / 2 + 1; i < n; i++) {
    for (int j = 0; j < 26; j++) {
      if (num[j][n + 1 - i] - (max(0, os[j][i - 1] - os[j][n - i]))) {
        ans[i] = 'a' + j;
        break;
      }
    }
    for (int j = 0; j < 26; j++) {
      os[j][i] = os[j][i - 1] + (ans[i] == 'a' + j);
    }
  }
  for (int i = 0; i < 26; i++) {
    if (len[i][n] - os[i][n - 1]) {
      ans[n] = 'a' + i;
      break;
    }
  }
  cout << "! ";
  for (int i = 1; i <= n; i++) cout << ans[i];
  cout << endl;
  return 0;
}
