#include <bits/stdc++.h>
using namespace std;
map<string, int> go(int l, int r) {
  map<string, int> res;
  if (l > r) return res;
  cout << "? " << l << " " << r << endl;
  int len = r - l + 1;
  int m = ((len + 1) * len) / 2;
  for (int i = 0; i < m; ++i) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    ++res[s];
  }
  return res;
}
string solve(int n) {
  map<string, int> a, b;
  a = go(1, n);
  b = go(2, n);
  for (auto el : b) a[el.first] -= el.second;
  vector<vector<int> > z(n + 1, vector<int>(26, 0));
  for (auto el : a) {
    if (el.second == 0) continue;
    string s = el.first;
    for (int i = 0; i < s.length(); ++i) ++z[s.length()][s[i] - 'a'];
  }
  string res = string(n, 'a');
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < 26; ++j)
      if (z[i + 1][j] - z[i][j] == 1) res[i] += j;
  return res;
}
string dif(string a, string b) {
  vector<int> h(26, 0);
  for (int i = 0; i < a.length(); ++i) ++h[a[i] - 'a'];
  for (int i = 0; i < b.length(); ++i) --h[b[i] - 'a'];
  for (int i = 0; i < 26; ++i)
    if (h[i] < 0) return "+";
  string res = "";
  for (int i = 0; i < 26; ++i) res += string(h[i], char(i + 'a'));
  return res;
}
int n, m;
string res;
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  if (n < 8) {
    cout << "! " + solve(n) << endl;
    return 0;
  }
  m = (n + 1) / 2;
  res = solve(m) + string(n - m, 'a');
  map<string, int> a = go(1, n);
  vector<vector<string> > ss(n + 1);
  for (auto el : a) {
    string s = el.first;
    int num = el.second;
    while (num--) ss[s.length()].push_back(s);
  }
  for (int i = 0; i < n - m; ++i) {
    multiset<string> se;
    for (int j = 0; j < i + 2; ++j) se.insert(dif(ss[n][0], ss[n - 1 - i][j]));
    for (int j = 1; j <= i; ++j) {
      string t = res.substr(0, i + 1 - j) + res.substr(n - j);
      sort(t.begin(), t.end());
      se.erase(se.find(t));
    }
    string t1 = res.substr(0, i);
    string t2 = res.substr(n - i);
    string s1 = *se.begin();
    string s2 = *(++se.begin());
    string d1 = dif(s1, t1);
    string d2 = dif(s2, t2);
    if (d1 == "+" || d2 == "+") {
      d1 = dif(s1, t2);
      d2 = dif(s2, t1);
    }
    if (res[i] != d1[0]) swap(d1, d2);
    res[n - 1 - i] = d2[0];
  }
  cout << "! " + res << endl;
  return 0;
}
