#include <bits/stdc++.h>
using namespace std;
int n;
vector<string> all;
int cnt[105][205];
string ans = "";
vector<string> ask(int l, int r) {
  string answer = "vmkdfasdajd";
  cout << "? " << l + 1 << " " << r + 1 << endl;
  vector<string> result;
  string s;
  for (int i = l; i <= r; i++) {
    for (int j = i; j <= r; j++) {
      cin >> s;
      sort(s.begin(), s.end());
      result.push_back(s);
    }
  }
  return result;
}
void guess(string s) {
  cout << "! " << s << endl;
  exit(0);
}
string getSuffixOfLen(int len, vector<string> all, vector<string> prefix) {
  multiset<string> st;
  for (string s : all) {
    if ((int)s.size() == len) {
      st.insert(s);
    }
  }
  for (string s : prefix) {
    if ((int)s.size() == len) {
      st.erase(st.find(s));
    }
  }
  return *st.begin();
}
char getDiff(string a, string b) {
  multiset<char> st;
  for (int i = 0; i < (int)a.size(); i++) {
    st.insert(a[i]);
  }
  for (int i = 0; i < (int)b.size(); i++) {
    st.erase(st.find(b[i]));
  }
  return *st.begin();
}
void getFirstHalf() {
  vector<string> all, prefix;
  all = ask(0, n / 2 - 1);
  prefix = ask(0, n / 2 - 2);
  for (int i = n / 2 - 1; i >= 0; i--) {
    if (i == n / 2 - 1) {
      ans = getSuffixOfLen(1, all, prefix);
    } else {
      ans = getDiff(getSuffixOfLen(n / 2 - i, all, prefix), ans) + ans;
    }
  }
}
int main() {
  scanf("%d", &n);
  if (n <= 3) {
    string ans = "";
    for (int i = 0; i < n; i++) {
      ans += ask(i, i)[0];
    }
    guess(ans);
  }
  getFirstHalf();
  cerr << ans << endl;
  all = ask(0, n - 1);
  for (string s : all) {
    for (int i = 0; i < (int)s.size(); i++) {
      cnt[(int)s.size()][s[i]]++;
    }
  }
  int r = n / 2;
  int l = (n & 1) > 0 ? r : r - 1;
  for (int i = n / 2; i < n; i++) {
    multiset<char> st;
    for (char c = 'a'; c <= 'z'; c++) {
      for (int j = 0; j < cnt[l + 1][c] - cnt[l][c]; j++) {
        st.insert(c);
      }
    }
    for (int j = l; j < r; j++) {
      st.erase(st.find(ans[j]));
    }
    ans.append(1, *st.begin());
    l--;
    r++;
    cerr << ans << endl;
  }
  guess(ans);
  return 0;
}
