//#pragma GCC optimize("O3") #include using namespace std; #define ll long long #define rep(i,n) for (ll i=0;i<(ll)n;i++) #define rrep(i,n) for (ll i=(n)-1;i>=(ll)0;i--) #define loop(i,m,n) for(ll i=m;i<=(ll)n;i++) #define rloop(i,m,n) for(ll i=m;i>=(ll)n;i--) #define vl vector #define vvl vector> #define vdbg(a) rep(ii,a.size()){cout<>n>>m; vl bk(m+1,0); vl aite(m+1,0); rep(i,n){ ll c; cin>>c; bk[c]++; } map mp; //自分の手札を出力 ofstream fout("./two");//出力する場合の出力先を指定 rep(i,m+1){ fout<>aite[i]; } bool guessed=false; while(1){ string turn,res; cin>>turn; if(turn=="TURN"){ ll mex=m; loop(i,1,m-1){ if(mp.count(i))continue; mex=i; break; } if(mex==m)break; cout<<"ASK "<>res; ll type,cnt; cin>>type>>cnt; if(res=="GUESSED"){ guessed=true; continue; } mp[type]=cnt; } vl ans; loop(i,1,m-1){ ll cnt=mp[i]-bk[i]-aite[i]; rep(z,cnt)ans.push_back(i); } while(ans.size()>tmp; if(!guessed)rep(i,4)cin>>tmp; } void one(){ ll n,m; cin>>n>>m; vl bk(m+1,0); vl aite(m+1,0); rep(i,n){ ll c; cin>>c; bk[c]++; } map mp; //自分の手札を出力 ofstream fout("./one");//出力する場合の出力先を指定 rep(i,m+1){ fout<>aite[i]; } bool guessed=false; while(1){ string turn,res; cin>>turn; if(turn=="TURN"){ ll mex=m; loop(i,1,m-1){ if(mp.count(i))continue; mex=i; break; } if(mex==m)break; cout<<"ASK "<>res; ll type,cnt; cin>>type>>cnt; if(res=="GUESSED"){ guessed=true; continue; } mp[type]=cnt; } vl ans; loop(i,1,m-1){ ll cnt=mp[i]-bk[i]-aite[i]; // cout<>tmp; if(!guessed)rep(i,4)cin>>tmp; } //メイン int main(){ ll p; cin>>p; if(p==1)one(); else two(); return 0; }