#include using namespace std; #define int long long int N; signed main(){ cin>>N; if(N == 1){ cout << "! 1" << endl; return 0; } vector> edge(N-1); vector> G(N); for(int i = 0; i < N-1; i++){ cin>>edge[i].first>>edge[i].second; edge[i].first--; edge[i].second--; G[edge[i].first].push_back(edge[i].second); G[edge[i].second].push_back(edge[i].first); } vector nibu(N); vector visited(N); vector kouho; //1次予選. queue Q; Q.push(0); visited[0] = true; while(!Q.empty()){ int now = Q.front(); Q.pop(); for(int i:G[now]){ if(visited[i]) continue; visited[i] = true; nibu[i] = 1 - nibu[now]; Q.push(i); } } cout << "? "; for(int i = 0; i < N-1; i++){ if(nibu[edge[i].first]) cout << edge[i].first+1 << " "; else cout << edge[i].second+1 << " "; } cout << endl; string H; cin>>H; bool p = false; if(H == "Yes") p = true; for(int i = 0; i < N; i++){ if(p == nibu[i]) kouho.push_back(i); } while((int)kouho.size() > 1){ vector Z(N); cout << "? "; int mid = ((int)kouho.size()) / 2; for(int i = 0; i < mid; i++){ Z[kouho[i]] = 2; } for(int i = mid; i < (int)(kouho.size()); i++){ Z[kouho[i]] = 1; } for(int i = 0; i < N-1; i++){ int a = edge[i].first; int b = edge[i].second; if(Z[a] == 2){ cout << a+1 << " "; } else if(Z[a] == 1){ cout << b+1 << " "; } else if(Z[b] == 1){ cout << a+1 << " "; } else if(Z[b] == 2){ cout << b+1 << " "; } else{ cout << a+1 << " "; } } cout << endl; string res; cin>>res; vector ara; if(res == "Yes"){ for(int i = 0; i < mid; i++) ara.push_back(kouho[i]); } else{ for(int i = mid; i < (int)kouho.size(); i++) ara.push_back(kouho[i]); } kouho = ara; } cout << "! " << kouho[0]+1 << endl; }