#include using namespace std; int main(void){ int id,n,m; cin>>id>>n>>m; long long a[n]; vector k(m+1,0);//各カードの枚数 for(int i=0;i>a[i]; k[a[i]]++; } //別圧縮? long long kai=1,rui=1; for(int i=1;i<=m;i++)kai*=i; for(int i=0;i0;i--){ as1*=i+1; as1+=k[i]; asmax*=i+1; asmax+=i; } vectorsend;//m進数変換 while(asmax){ send.push_back(as1%m); as1/=m; asmax/=m; } reverse(send.begin(),send.end()); vectorba(m+1,0);//場にあるカードの枚数 vectorisask(m+1,0);//尋ねたか long long as2=0,as3=0;//相手の圧縮列 int it=0,flag=0,myask=0; int ss=0;//総質問回数 vectoropk(m+1,0);//相手のカード列 while(1){ string s; cin>>s; if(s=="TURN"){ if(flag==0){ if(flag2){ cout<<"ASK "<=1;i--){ if(isask[i]==0){ cout<<"ASK "<0){ cout<>x>>k2; if(flag==0&&myask==0&&flag2){ as2*=m; as2+=(x-1); }else if(flag==0&&myask==0&&flag2==0){ opk[x]++; } myask=0; if(isask[x]==0){ ba[x]=k2; isask[x]=1; } ss++; if(ss==send.size()*2&&flag2)flag=1; if(ss==n*2&&flag2==0)flag=1; }else if(s=="GUESSED"){ int gm; cin>>gm>>gm; }else if(s=="END"){ break; }else{ return 1; } if(flag==1&&flag2){ for(long long i=1;i<=m;i++){ opk[i]=as2%(i+1); as2/=(i+1); } flag=2; }else if(flag==1&&flag2==0){ flag=2; } } return 0; }