#include <bits/stdc++.h>
using namespace std;
const int N = 105;
char ans[N];
int cnt[N][26], c[26];
map<string, int> mp;
string a[N];
signed main() {
  int n;
  cin >> n;
  if (n == 1) {
    cout << "? 1 1" << endl;
    string s;
    cin >> s;
    cout << "! " << s << endl;
    return 0;
  }
  int m = n / 2;
  string s;
  if (m > 1) {
    cout << "? " << 2 << " " << m << endl;
    for (int i = 1; i <= m * (m - 1) / 2; ++i)
      cin >> s, sort(s.begin(), s.end()), mp[s]++;
  }
  cout << "? " << 1 << " " << m << endl;
  for (int i = 1; i <= m * (m + 1) / 2; ++i) {
    cin >> s;
    sort(s.begin(), s.end());
    if (mp[s])
      --mp[s];
    else
      a[s.size()] = s;
  }
  for (int i = 1; i <= m; ++i) {
    for (int j = 0; j < a[i].size(); ++j) c[a[i][j] - 'a']++;
    for (int j = 1; j < i; ++j) c[ans[j] - 'a']--;
    for (int j = 0; j < 26; ++j)
      if (c[j] == 1) ans[i] = j + 'a', --c[j];
  }
  cout << "? " << 1 << " " << n << endl;
  for (int i = 1; i <= n * (n + 1) / 2; ++i) {
    cin >> s;
    for (int j = 0; j < s.size(); ++j) cnt[s.size()][s[j] - 'a']++;
  }
  for (int i = m + 1; i <= n; ++i) {
    for (int j = 0; j < 26; ++j) cnt[i][j] -= cnt[i + 1][j];
    for (int j = m + 1; j < i; ++j)
      for (int k = 0; k < 26; ++k) cnt[i][k] -= cnt[j][k];
  }
  for (int i = m + 1; i <= n; ++i)
    for (int j = 0; j < 26; ++j)
      if (cnt[i][j] - (ans[n - i + 1] - 'a' == j) == 1) ans[i] = j + 'a';
  cout << "! ";
  for (int i = 1; i <= n; ++i) cout << ans[i];
  cout << endl;
  return 0;
}
