#include using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define ll long long const long long mod=998244353; const long long hmod=46216567629137; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); int N; cin>>N; int u[N],v[N]; vector>G[N+1]; for(int i=1;i<=N-1;i++){ cin>>u[i]>>v[i]; G[u[i]].push_back({v[i],i}); G[v[i]].push_back({u[i],i}); } int dist[N+1]; bool already[N+1]; for(int i=1;i<=N;i++){ dist[i]=0; already[i]=0; } functiondfs=[&](int pos){ already[pos]=1; for(int i=0;inode; setyet; for(int i=1;i<=N;i++){ if(dist[i]%2==0){ node.insert(i); yet.insert(i); } } cout<<"? "; for(int i=1;i<=N-1;i++){ if(node.count(u[i])&&node.count(v[i])){ if(yet.count(u[i])){ cout<>first_res; vectornokori; if(first_res=="Yes"){ for(int i=1;i<=N;i++){ if(node.count(i)) nokori.push_back(i); } } else{ for(int i=1;i<=N;i++){ if(!node.count(i)) nokori.push_back(i); } } int free[N+1]; while(nokori.size()>=2){ yet.clear(); for(int i=1;i<=N;i++) free[i]=-1; rep(i,nokori.size()) free[nokori[i]]=0; for(int i=0;i>res; if(res=="Yes"){ nokori.clear(); for(int i=1;i<=N;i++){ if(free[i]==1) nokori.push_back(i); } } else{ nokori.clear(); for(int i=1;i<=N;i++){ if(free[i]==0) nokori.push_back(i); } } } cout<<"! "<