#include <bits/stdc++.h>   using namespace std;   const long long maxn = 6e6;   const long long inf = 1e18;   const long long maxv = 2e8 + 100;   const int miniinf = 1e9;   const long double eps = 1e-6;   const long long flowconst = 1e9;   void init() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);   }   int main() {     init();     int n;     cin >> n;     vector<string> ans1;     vector<string> ans2;     if (n == 1) {       cout <<  ? 1 1  << endl;       string ans;       cin >> ans;       cout <<  !   << ans << endl;       return 0;     }     map<string, int> foo;     cout <<  ? 1   << n << endl;     for (int i = 0; i < n * (n + 1) / 2; i++) {       string x;       cin >> x;       sort(x.begin(), x.end());       foo[x]++;     }     cout <<  ? 1   << n - 1 << endl;     for (int i = 0; i < (n - 1) * (n) / 2; i++) {       string x;       cin >> x;       sort(x.begin(), x.end());       foo[x]--;     }     vector<string> diff;     for (auto ev : foo)       if (ev.second == 1) diff.push_back(ev.first);     sort(diff.begin(), diff.end(),          [&](string &a, string &b) { return a.size() < b.size(); });     string ans;     for (int i = 0; i < n; i++) {       vector<int> cnt(26, 0);       for (int j = 0; j < diff[i].size(); j++) {         cnt[diff[i][j] -  a ]++;       }       for (int j = 0; j < ans.size(); j++) {         cnt[ans[j] -  a ]--;       }       for (int j = 0; j < 26; j++) {         if (cnt[j] > 0) {           ans +=  a  + j;         }       }     }     reverse(ans.begin(), ans.end());     cout <<  !  ;     cout << ans << endl;     return 0;   }   