#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
const int INF = 1e9;
vector<int> p0;
vector<int> p1;
vector<char> t;
class comp {
 public:
  bool operator()(string x, string y) const {
    if (x.size() == y.size()) return x < y;
    return x.size() < y.size();
  }
};
multiset<string, comp> a;
multiset<char> b;
int main() {
  int n;
  cin >> n;
  cout << '?' << ' ' << 1 << ' ' << n << endl;
  if (n == 1) {
    string s;
    cin >> s;
    cout << '!' << ' ' << s << endl;
    return 0;
  }
  for (int i = 1; i <= (n * (n + 1) / 2); i++) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    a.insert(s);
  }
  cout << '?' << ' ' << 2 << ' ' << n << endl;
  for (int i = 1; i <= (n * (n - 1) / 2); i++) {
    string s;
    cin >> s;
    sort(s.begin(), s.end());
    if (a.find(s) != a.end()) a.erase(a.find(s));
  }
  string arr;
  for (auto i : a) {
    for (int j = 0; j < i.size(); j++) {
      b.insert(i[j]);
    }
    for (int j = 0; j < arr.size(); j++) {
      if (b.find(arr[j]) != b.end()) b.erase(b.find(arr[j]));
    }
    arr += *b.begin();
    b.clear();
  }
  cout << '!' << ' ' << arr << endl;
}
