#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> co;
vector<int> kk[101];
vector<int> tt;
int cot[101][26];
int pre[101][26];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  if (n == 1) {
    cout << "? 1 1" << endl;
    string s;
    cin >> s;
    cout << "! " << s << endl;
    return 0;
  }
  int nn = n;
  vector<int> ans;
  n /= 2;
  for (int i = 0; i < 26; i++) {
    co.push_back(0);
  }
  if (n == 1) {
    cout << "? 1 1" << endl;
    string s;
    cin >> s;
    ans.push_back(s[0] - 'a');
  } else {
    cout << "? 1 " << n << endl;
    map<vector<int>, int> ss;
    for (int i = 0; i < (n * (n + 1)) / 2; i++) {
      string s;
      cin >> s;
      for (int j = 0; j < 26; j++) {
        co[j] = 0;
      }
      for (int j = 0; j < s.size(); j++) {
        co[s[j] - 'a']++;
      }
      ss[co]++;
    }
    cout << "? 1 " << n - 1 << endl;
    for (int i = 0; i < (n * (n - 1)) / 2; i++) {
      string s;
      cin >> s;
      for (int j = 0; j < 26; j++) {
        co[j] = 0;
      }
      for (int j = 0; j < s.size(); j++) {
        co[s[j] - 'a']++;
      }
      ss[co]--;
    }
    for (int i = 0; i < 26; i++) {
      kk[0].push_back(0);
    }
    for (auto j : ss) {
      if (j.second > 0) {
        int su = 0;
        for (int i = 0; i < 26; i++) {
          su += j.first[i];
        }
        kk[su] = j.first;
      }
    }
    for (int j = 1; j <= n; j++) {
      for (int k = 0; k < 26; k++) {
        if (kk[j][k] > kk[j - 1][k]) {
          ans.push_back(k);
        }
      }
    }
    reverse(ans.begin(), ans.end());
  }
  cout << "? " << 1 << " " << nn << endl;
  string mm;
  for (int j = 0; j < (nn * (nn + 1)) / 2; j++) {
    string s;
    cin >> s;
    for (int jj = 0; jj < s.size(); jj++) {
      cot[s.size()][s[jj] - 'a']++;
    }
  }
  for (int k = 0; k < 26; k++) {
    for (int j = 0; j <= nn / 2; j++) {
      int xx = cot[j + 1][k] - cot[j][k];
      for (int i = j; i < ans.size(); i++) {
        if (ans[i] == k) {
          xx -= 1;
        }
      }
      pre[nn - j - 1][k] = xx;
    }
  }
  for (int j = n; j < nn; j++) {
    ans.push_back(-1);
  }
  for (int j = n; j < nn; j++) {
    for (int k = 0; k < 26; k++) {
      if (pre[j][k] > pre[j - 1][k]) {
        ans[j] = k;
      }
    }
  }
  string s = "abcdefghijklmnopqrstuvwxyz";
  cout << "! ";
  for (int i = 0; i < nn; i++) {
    cout << s[ans[i]];
  }
  cout << endl;
  return 0;
}
