#include using namespace std; bool isYes() { string s; cin >> s; return s == "Yes"; } int main () { int N; cin >> N; std::vector> gr(N); vector> eg(N-1); for (auto& [a, b] : eg) { cin >> a >> b; gr[--a].push_back(--b); gr[b].push_back(a); } vector D(N, N + 1); D[0] = 0; queue que; que.push(0); while (!que.empty()) { int u = que.front(); que.pop(); for (auto& v : gr[u]) { if (D[v] > D[u] + 1) { D[v] = D[u] + 1; que.push(v); } } } cout << "?"; for (auto& [a, b] : eg) { if (D[a] & 1) swap(a, b); cout << " " << a + 1; } cout << endl; int fl = isYes(); fl ^= 1; int ans = 0; for (int i = 0; i < 14; i ++) { cout << "?"; for (auto& [a, b] : eg) { int x = (fl ? b : a); if (((x >> i) & 1) == 0) { x ^= (a ^ b); } cout << " " << x + 1; } cout << endl; ans |= (isYes() << i); } cout << "! " << ans + 1 << endl; }