Language: C++

/*
Author : N_o_o_B
Created : June 29 2020 15:37:05 
*/
#include <bits/stdc++.h>
using namespace std;
/*
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
*/
#define TRACE
#ifdef TRACE
#define trace(...) { cerr<<"[ "; __trace__(#__VA_ARGS__, __VA_ARGS__);}
#undef endl
template <typename Arg1,typename Arg2>
ostream& operator << (ostream& out, const pair<Arg1,Arg2> &x) {
    return out<<"("<<x.first<<","<<x.second<<")";
}
 
template <typename Arg1>
ostream& operator << (ostream& out, const vector<Arg1> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1>
ostream& operator << (ostream& out, const set<Arg1> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1,typename Arg2>
ostream& operator << (ostream& out, const map<Arg1,Arg2> &a) {
    out<<"[";for(const auto &x:a)out<<x<<",";return out<<"]";
}
 
template <typename Arg1>
void __trace__(const string name, Arg1&& arg1){
    cerr << name << " : " << arg1 << " ] " << endl;
}
 
template <typename Arg1, typename... Args>
void __trace__(const string names, Arg1&& arg1, Args&&... args){
    const string name = names.substr(0,names.find(','));
    cerr<<name<<" : "<<arg1<<" | ";
    __trace__(names.substr(1+(int)name.size()), args...);
}
#else
    #define trace(args...)
#endif
 
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pair<int,int>> vii;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<pair<ll,ll>> vll;
typedef vector<vl> vvl;
//typedef tree<pii, null_type, less<pii>, rb_tree_tag, tree_order_statistics_node_update> oset;
#define fori(i,n) for(int i=0;i<n;i++)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define repd(i,a,b) for(int i=a;i>=b;i--)
#define ford(i,n)  for(int i=n-1;i>=0;i--)
#define trav(x,a) for(auto& x:a)
#define all(x) x.begin(),x.end()
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define fi first
#define se second
clock_t time_p=clock();
void time_taken()
{
    time_p=clock()-time_p;
    cerr<<"Time Taken : "<<(float)(time_p)/CLOCKS_PER_SEC<<"\n";
}
//const ll mod=998244353;
const ll mod=1e9+7;
const ll INF=1e18;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cout.precision(12);cout << fixed;

    int n;
    cin >> n;
    int lo=0,hi=n;
    auto ask = [&](int st){
        cout << "? ";
        for(int i=st;i-st<n;i++){
            cout << i+1 << " \n"[i==st+n-1];
        }
        cout << endl << flush;
        string res;
        cin >> res;
        return res;
    };
    string ans(2*n,' ');
    int lo = 0,hi = n-1;
    string ans0 = ask(lo);
    while(lo <= hi){
        int mid = (lo+hi)/2;
        string res1 = ask(mid);
        string res2 = ask(mid+1);
        if(res1 != res2){
            ans[mid]=res1[0];
            ans[mid+n]=res2[0];
            for(int i=0;i<2*n;i++){
                if(ans[i]==' '){
                    cout << "? ";
                    cout << i+1 << " ";
                    if(i > mid and i < mid+n){
                        fori(j,2*n){
                            if(j < mid or j > mid + n){
                                cout << j+1 << " ";
                            }
                        }
                    }
                    else{
                        rep(j,mid+1,mid+n-1){
                            cout << j+1 << " ";
                        }
                    }
                    cout << endl << flush;
                    string res;
                    cin >> res;
                    ans[i] = res[0];
                }
            }
            cout << "! ";
            cout << ans << endl << flush;
            return 0;
        }
        else{
            if(res1 == ans0){
                lo = mid+1;
            }
            else{
                hi = mid-1;
            }
        }
    }


    time_taken();
    return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:101:9: error: redeclaration of 'int lo'
  101 |     int lo = 0,hi = n-1;
      |         ^~
a.cc:89:9: note: 'int lo' previously declared here
   89 |     int lo=0,hi=n;
      |         ^~
a.cc:101:16: error: redeclaration of 'int hi'
  101 |     int lo = 0,hi = n-1;
      |                ^~
a.cc:89:14: note: 'int hi' previously declared here
   89 |     int lo=0,hi=n;
      |              ^~