#include <bits/stdc++.h>
using namespace std;
const long long N = 2e5 + 7;
const long long INF = 1e9;
const long long MOD = INF + 7;
string s;
vector<string> ask(long long lo, long long hi) {
  cout << "? " << lo << " " << hi << endl;
  long long len = hi - lo + 1;
  long long cnt = len * (len + 1) / 2LL;
  vector<string> nu(cnt);
  for (long long i = 0; i < cnt; i++) {
    cin >> s;
    sort((s).begin(), (s).end());
    nu[i] = s;
  }
  return nu;
}
void fnd(string res) { cout << "! " << res << endl; }
char gogo(string x, string y) {
  vector<long long> cnt(26);
  for (long long i = 0; i < ((long long)(x).size()); i++) {
    cnt[x[i] - 'a']++;
  }
  for (long long i = 0; i < ((long long)(y).size()); i++) {
    cnt[y[i] - 'a']--;
  }
  char send;
  for (long long i = 0; i < 26; i++) {
    if (cnt[i] > 0) send = i + 'a';
  }
  return send;
}
void solve() {
  long long n;
  cin >> n;
  vector<string> a = ask(1, n);
  if (n == 1) fnd(a[0]);
  vector<string> b = ask(2, n);
  map<string, long long> mp;
  for (long long i = 0; i < ((long long)(a).size()); i++) {
    mp[a[i]]++;
  }
  for (long long i = 0; i < ((long long)(b).size()); i++) {
    mp[b[i]]--;
  }
  map<long long, string> mapchik;
  for (auto [x, y] : mp) {
    if (y > 0) {
      mapchik[((long long)(x).size())] = x;
    }
  }
  string res;
  for (long long i = 1; i <= n; i++) {
    res.push_back(gogo(mapchik[i], mapchik[i - 1]));
  }
  fnd(res);
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t = 1;
  while (t--) {
    solve();
  }
}
