//interactive int@n; if(n==1){ wt("! 1"); exit(0); } int@(u,v)[n-1]; graph g; g.setEdge(n+1,n-1,u,v); int d[n+1]; g.getDist(1,d); unordered_sets,s0,s1; rep(i,1,n+1){ (d[i]&1?s1:s0).insert(i); } wtN('?'); rep(j,n-1){ wtN(' '); wtN(s1.count(u[j])?u[j]:v[j]); } wt(""); string@r; int b=r[0]=='Y'; s=b?s1:s0; s0.clear(); s1.clear(); while(s.size()>1){ int p=0; for(auto t:s){ (p?s1:s0).insert(t); p^=1; } wtN('?'); rep(j,n-1){ wtN(' '); dprintf(2,"hoge\n"); wtN(s1.count(u[j])||!s1.count(v[j])&&(d[u[j]]&1)!=b?u[j]:v[j]); } wt(""); string@r; s=r[0]=='Y'?s1:s0; s0.clear(); s1.clear(); } wt("!",*s.begin());