#include <bits/stdc++.h>
using namespace std;
int main() {
  int N;
  string s;
  cin >> N;
  printf("? %d %d\n", 1, N);
  fflush(stdout);
  vector<multiset<string>> subsegments(N + 1);
  subsegments[0].insert("");
  for (int i = 0; i < N * (N + 1) / 2; i++) {
    cin >> s;
    sort(s.begin(), s.end());
    subsegments[s.length()].insert(s);
  }
  if (N == 1) {
    cout << "! " << *subsegments[1].begin() << endl;
    cout.flush();
    return 0;
  }
  printf("? %d %d\n", 2, N);
  fflush(stdout);
  for (int i = 0; i < N * (N - 1) / 2; i++) {
    cin >> s;
    sort(s.begin(), s.end());
    subsegments[s.length()].erase(subsegments[s.length()].find(s));
  }
  string finalString = "";
  for (int i = 1; i < (int)subsegments.size(); i++)
    if (subsegments[i].empty())
      subsegments[i].insert(*subsegments[i - 1].begin());
  for (int i = 1; i < (int)subsegments.size(); i++) {
    string first = *(subsegments[i].begin());
    string second = *(subsegments[i - 1].begin());
    string newS(first.size() - second.size(), ' ');
    set_difference(first.begin(), first.end(), second.begin(), second.end(),
                   newS.begin());
    finalString += newS;
  }
  cout << "! " << finalString << endl;
  cout.flush();
}
