#include <bits/stdc++.h>
const int INF = (int)1e9 + 7;
const int N = (int)7070 + 7;
const int MAXN = (int)3e5 + 228;
using namespace std;
vector<string> ask(int l, int r) {
  vector<string> res;
  cout << "? " << l << ' ' << r << endl;
  int cnt = r - l + 1;
  cnt = (cnt + 1) * cnt / 2;
  for (int i = 1; i <= cnt; ++i) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    res.push_back(s);
  }
  return res;
}
string res;
multiset<string> st;
vector<string> cur1, cur2;
void add(int len) {
  st.clear();
  for (auto &to : cur1)
    if (to.size() == len) st.insert(to);
  for (auto &to : cur2)
    if (to.size() == len) st.erase(st.find(to));
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int n;
  cin >> n;
  cur1 = ask(1, n);
  if (n == 1) {
    cout << "! " << cur1[0] << endl;
    return 0;
  }
  cur2 = ask(2, n);
  for (int i = 1; i <= n; ++i) {
    add(i);
    string s = *st.begin();
    vector<int> cnt(26, 0);
    for (auto &it : s) cnt[it - 'a']++;
    for (int j = 0; j + 1 < i; ++j) cnt[res[j] - 'a']--;
    for (int j = 0; j < 26; ++j)
      if (cnt[j] == 1) res.push_back(j + 'a');
  }
  cout << "! " << res << endl;
  return 0;
}
