#include <bits/stdc++.h>
using namespace std;
const int MX = 109;
int n;
int strings_got = 0;
int query_count = 0;
vector<string> query(int L, int R) {
  42;
  int len = R - L + 1;
  int curr_cnt = (len * (len + 1)) / 2;
  ;
  42;
  strings_got += curr_cnt;
  42;
  query_count += 1;
  L++;
  R++;
  cout << "? " << L << ' ' << R << endl;
  cout.flush();
  vector<string> result(curr_cnt);
  for (int i = 0; i < curr_cnt; i++) {
    cin >> result[i];
  }
  return move(result);
}
unordered_map<string, int> query_wrap(int L, int R) {
  auto V = query(L, R);
  unordered_map<string, int> result;
  for (auto& s : V) {
    sort(s.begin(), s.end());
    result[s]++;
  }
  return move(result);
}
unordered_map<string, int> diff(unordered_map<string, int> A,
                                unordered_map<string, int> B) {
  unordered_map<string, int> R;
  for (auto it : A) {
    string s = it.first;
    int cntA = it.second;
    int cntB = B[s];
    int d = cntA - cntB;
    if (d != 0) {
      R[s] = d;
    }
  }
  return R;
}
void guess(string s) {
  ;
  ;
  42;
  for (int i = 0; i < n; i++) {
    42;
  }
  cout << "! " << s << endl;
  cout.flush();
  exit(0);
}
char string_diff_1(string A, string B) {
  int cnt[26] = {0};
  42;
  for (char c : A) cnt[c - 'a']++;
  for (char c : B) cnt[c - 'a']--;
  for (int i = 0; i < 26; i++)
    if (cnt[i]) return i + 'a';
  42;
}
int main() {
  cin >> n;
  string answer;
  answer.resize(n);
  for (int i = 0; i < n; i++) answer[i] = '-';
  if (n <= 1) {
    for (int i = 0; i < n; i++) {
      auto res = query(i, i);
      42;
      answer[i] = res[0][0];
    }
    guess(answer);
  }
  unordered_map<string, int> Q1 = query_wrap(0, n - 1);
  unordered_map<string, int> Q2 = query_wrap(1, n - 1);
  unordered_map<string, int> D = diff(Q1, Q2);
  42;
  string split[MX];
  for (auto it : D) {
    string s = it.first;
    int d = it.second;
    42;
    split[s.size()] = s;
  }
  for (int i = 1; i <= n; i++) {
    ;
  }
  answer[0] = split[1][0];
  for (int i = 2; i <= n; i++) {
    answer[i - 1] = string_diff_1(split[i], split[i - 1]);
  }
  guess(answer);
  return 0;
}
