#include <bits/stdc++.h>
using namespace std;
const long long maxn = 6e6;
const long long inf = 1e18;
const long long maxv = 2e8 + 100;
const int miniinf = 1e9;
const long double eps = 1e-6;
const long long flowconst = 1e9;
void init() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
int main() {
  init();
  int n;
  cin >> n;
  vector<string> ans1;
  vector<string> ans2;
  if (n == 1) {
    cout << "? 1 1" << endl;
    string ans;
    cin >> ans;
    cout << "! " << ans << endl;
    return 0;
  }
  map<string, int> foo;
  cout << "? 1 " << n << endl;
  for (int i = 0; i < n * (n + 1) / 2; i++) {
    string x;
    cin >> x;
    sort(x.begin(), x.end());
    foo[x]++;
  }
  cout << "? 1 " << n - 1 << endl;
  for (int i = 0; i < (n - 1) * (n) / 2; i++) {
    string x;
    cin >> x;
    sort(x.begin(), x.end());
    foo[x]--;
  }
  vector<string> diff;
  for (auto ev : foo)
    if (ev.second == 1) diff.push_back(ev.first);
  sort(diff.begin(), diff.end(),
       [&](string &a, string &b) { return a.size() < b.size(); });
  string ans;
  for (int i = 0; i < n; i++) {
    vector<int> cnt(26, 0);
    for (int j = 0; j < diff[i].size(); j++) {
      cnt[diff[i][j] - 'a']++;
    }
    for (int j = 0; j < ans.size(); j++) {
      cnt[ans[j] - 'a']--;
    }
    for (int j = 0; j < 26; j++) {
      if (cnt[j] > 0) {
        ans += 'a' + j;
      }
    }
  }
  reverse(ans.begin(), ans.end());
  cout << "! ";
  cout << ans << endl;
  return 0;
}
