#include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 1000000000000000001LL bool q(vector x){ cout<<"?"; rep(i,x.size()){ cout<<' '<>res; return res=="Yes"; } int main(){ int n; cin>>n; vector u(n-1),v(n-1); vector> E(n); rep(i,n-1){ cin>>u[i]>>v[i]; u[i]--,v[i]--; E[u[i]].push_back(v[i]); E[v[i]].push_back(u[i]); } vector d(n,Inf32); d[0] = 0; queue Q; Q.push(0); while(Q.size()>0){ int x = Q.front(); Q.pop(); rep(i,E[x].size()){ int y = E[x][i]; if(d[y]==Inf32){ d[y] = d[x]^1; Q.push(y); } } } vector> xs(n-1); rep(i,n-1){ if(d[u[i]]==0){ xs[i] = {u[i],v[i]}; } else{ xs[i] = {v[i],u[i]}; } } { vector t(n-1); rep(i,n-1){ t[i] = xs[i][0]; } if(!q(t)){ rep(i,n-1)swap(xs[i][0],xs[i][1]); } } int ans = 0; rep(i,14){ vector t(n-1); rep(j,n-1){ if((xs[j][0]>>i)&1)t[j] = xs[j][0]; else t[j] = xs[j][1]; } if(q(t))ans |= 1<