#include <bits/stdc++.h>
using namespace std;
const int maxn = 110;
unordered_map<string, int> mp[maxn];
int cnt[30];
int main() {
  string ans;
  int n;
  scanf("%d", &n);
  if (n == 1) {
    puts("? 1 1");
    fflush(stdout);
    cin >> ans;
    cout << "! " << ans << endl;
  } else {
    printf("? 1 %d\n", n);
    fflush(stdout);
    string temp;
    for (int i = 0; i < n * (n + 1) / 2; i++) {
      cin >> temp;
      sort(temp.begin(), temp.end());
      mp[temp.size()][temp]++;
    }
    printf("? 2 %d\n", n);
    fflush(stdout);
    for (int i = 0; i < n * (n - 1) / 2; i++) {
      cin >> temp;
      sort(temp.begin(), temp.end());
      mp[temp.size()][temp]--;
    }
    for (int i = 1; i <= n; i++) {
      for (auto it = mp[i].begin(); it != mp[i].end(); it++) {
        if (it->second) {
          memset(cnt, 0, sizeof(cnt));
          for (int j = 0; j < ans.size(); j++) {
            cnt[ans[j] - 'a']++;
          }
          for (int j = 0; j < it->first.size(); j++) {
            if (cnt[it->first[j] - 'a'] == 0) {
              ans += it->first[j];
              break;
            }
            cnt[it->first[j] - 'a']--;
          }
        }
      }
    }
    printf("! ");
    cout << ans << endl;
  }
}
