#include <bits/stdc++.h>
using namespace std;
multiset<string> v1, v2;
int f(int x) { return (x * (x + 1)) / 2; }
int main() {
  int n;
  cin >> n;
  cout << "? 1 " << n << endl;
  cout.flush();
  for (int i = 0; i < f(n); i++) {
    string x;
    cin >> x;
    sort(x.begin(), x.end());
    v1.insert(x);
  }
  if (n == 1) {
    cout << "! " << *v1.begin();
    cout.flush();
    return 0;
  }
  cout << "? 2 " << n << endl;
  cout.flush();
  for (int i = 0; i < f(n - 1); i++) {
    string x;
    cin >> x;
    sort(x.begin(), x.end());
    v2.insert(x);
  }
  vector<string> left;
  for (auto x : v1) {
    if (v2.find(x) != v2.end()) {
      v2.erase(v2.find(x));
    } else
      left.push_back(x);
  }
  vector<int> cool;
  for (auto x : left) {
    int sum = 0;
    for (int i = 0; i < x.size(); i++) {
      sum += x[i] - 'a';
    }
    cool.push_back(sum);
  }
  sort(cool.begin(), cool.end());
  for (int i = (int)cool.size() - 1; i >= 1; i--) {
    cool[i] -= cool[i - 1];
  }
  string ans = "";
  for (int i = 0; i < (int)cool.size(); i++) {
    ans += cool[i] + 'a';
  }
  cout << "! " << ans << endl;
  cout.flush();
  return 0;
}
