#include <bits/stdc++.h>
const double eps = 1e-10;
const int maxn = 100 + 10;
const long long mod = 1e9 + 7;
int sgn(double a) { return a < -eps ? -1 : a < eps ? 0 : 1; }
using namespace std;
string s;
multiset<string> st;
string ss[maxn];
char ans[maxn * maxn];
bool cmp(string s1, string s2) { return s1.size() < s2.size(); }
int buc[maxn * maxn];
int main() {
  int n;
  cin >> n;
  if (n == 1) {
    cout << "? " << 1 << " " << 1 << endl;
    fflush(stdout);
    char c;
    cin >> c;
    cout << "! " << c;
    fflush(stdout);
    return 0;
  }
  cout << "? " << 1 << " " << n << endl;
  fflush(stdout);
  for (int i = 0; i < n * (n + 1) / 2; i++) {
    cin >> s;
    sort(s.begin(), s.end());
    st.insert(s);
  }
  cout << "? " << 2 << " " << n << endl;
  fflush(stdout);
  for (int i = 0; i < n * (n - 1) / 2; i++) {
    cin >> s;
    sort(s.begin(), s.end());
    st.erase(st.find(s));
  }
  int cnt = 0;
  for (auto p : st) {
    ss[cnt++] = p;
  }
  sort(ss, ss + cnt, cmp);
  ans[0] = ss[0][0];
  for (int i = 1; i < cnt; i++) {
    for (auto p : ss[i]) buc[p]++;
    for (auto p : ss[i - 1]) buc[p]--;
    for (int j = 0; j < 127; j++) {
      if (buc[j] > 0) {
        buc[j] = 0;
        ans[i] = j;
        break;
      }
    }
  }
  cout << "! " << ans;
  fflush(stdout);
  return 0;
}
