#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const int MOD = 1e9 + 7;
char str[101];
vector<string> res1;
vector<string> res2;
int cmp(string x, string y) { return x.size() > y.size(); }
vector<string> v;
int cnt[101][26];
char ans[101];
int main() {
  int n;
  scanf("%d", &n);
  printf("? 1 %d\n", n);
  fflush(stdout);
  for (int i = 0; i < n * (n + 1) / 2; i++) {
    scanf("%s", str);
    sort(str, str + strlen(str));
    res1.push_back(str);
  }
  if (n == 1) {
    printf("! %s\n", res1[0].c_str());
    fflush(stdout);
    return 0;
  }
  printf("? 1 %d\n", n - 1);
  fflush(stdout);
  for (int i = 0; i < n * (n - 1) / 2; i++) {
    scanf("%s", str);
    sort(str, str + strlen(str));
    res2.push_back(str);
  }
  sort(res1.begin(), res1.end());
  sort(res2.begin(), res2.end());
  int x = 0;
  int y = 0;
  while (1) {
    if (x >= res1.size() && y >= res2.size()) break;
    if (x >= res1.size()) {
      y++;
      continue;
    }
    if (y >= res2.size()) {
      v.push_back(res1[x]);
      x++;
      continue;
    }
    if (res1[x] == res2[y]) {
      x++;
      y++;
    } else {
      v.push_back(res1[x]);
      x++;
    }
  }
  sort(v.begin(), v.end(), cmp);
  for (int i = 0; i < n; i++) {
    for (char it : v[i]) cnt[i][it - 'a']++;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 26; j++) {
      if (cnt[i][j] != cnt[i + 1][j]) {
        ans[i] = 'a' + j;
        break;
      }
    }
  }
  printf("! %s\n", ans);
  fflush(stdout);
  return 0;
}
