#include <bits/stdc++.h>
using namespace std;
const int maxn = 103;
map<string, int> mp1[maxn], mp2[maxn];
vector<int> ans;
char getA(string a, string b) {
  int c[30];
  memset(c, 0, sizeof(c));
  for (int i = 0; i < a.size(); i++) c[a[i] - 'a']++;
  for (int i = 0; i < b.size(); i++) c[b[i] - 'a']--;
  for (int i = 0; i < 26; i++)
    if (c[i] > 0) return i + 'a';
}
int main() {
  int n;
  cin >> n;
  if (n == 1) {
    cout << "? 1 1" << endl;
    string s;
    cin >> s;
    cout << "! " << s << endl;
  } else {
    cout << "? 1 " << n << endl;
    for (int i = 0; i < n * (n + 1) / 2; i++) {
      string s;
      cin >> s;
      sort(s.begin(), s.end());
      mp1[s.size()][s]++;
    }
    cout << "? 2 " << n << endl;
    for (int i = 0; i < n * (n - 1) / 2; i++) {
      string s;
      cin >> s;
      sort(s.begin(), s.end());
      mp2[s.size()][s]++;
    }
    for (int i = 1; i <= n; i++) {
      for (auto p : mp2[i]) mp1[i][p.first] -= mp2[i][p.first];
      for (auto p : mp1[i]) {
        if (p.second > 0) {
          string new1 = "";
          for (int j = 0; j < ans.size(); j++) new1 += ans[j];
          ans.push_back(getA(p.first, new1));
        }
      }
    }
    string new1 = "";
    for (int j = 0; j < ans.size(); j++) new1 += ans[j];
    cout << "! " << new1 << endl;
  }
}
