#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long mod = 1e9 + 7;
const int N = 100005;
int cal(int n) { return n * (n + 1) / 2; }
bool cmp(string s1, string s2) { return s1.size() < s2.size(); }
int c[26], d[26];
int main() {
  string ans;
  multiset<string> se;
  int n;
  cin >> n;
  cout << "? " << 1 << " " << n << endl;
  if (n == 1) {
    cin >> ans;
    cout << "! " << ans << endl;
    return 0;
  }
  for (int i = 0; i < cal(n); i++) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    se.insert(s);
  }
  cout << "? " << 2 << " " << n << endl;
  for (int i = 0; i < cal(n - 1); i++) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    se.erase(se.find(s));
  }
  vector<string> a;
  for (auto s : se) a.push_back(s);
  sort(a.begin(), a.end(), cmp);
  for (auto s : a) {
    memset(d, 0, sizeof d);
    for (auto x : s) {
      d[x - 'a']++;
    }
    for (int i = 0; i < 26; i++) {
      if (d[i] > c[i]) {
        c[i] = d[i];
        ans.push_back('a' + i);
        break;
      }
    }
  }
  cout << "! " << ans << endl;
  return 0;
}
