#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 10;
vector<int> G[MAXN];
int noway[MAXN];
pair<int, int> edge[MAXN];
int nowaycnt = 0;
void dfs(int u, int fa) {
  noway[u] = 1;
  nowaycnt++;
  for (auto it : G[u]) {
    if (it != fa) dfs(it, u);
  }
}
int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    edge[i] = {u, v};
  }
  while (n - nowaycnt > 2) {
    for (int i = 1; i <= n; i++) G[i].clear();
    for (int i = 0; i < n - 1; i++) {
      int u = edge[i].first, v = edge[i].second;
      if (noway[u] == 0 && noway[v] == 0) {
        G[u].push_back(v);
        G[v].push_back(u);
      }
    }
    int mid, u, v;
    for (mid = 1; mid <= n; mid++) {
      if (G[mid].size() >= 2) {
        u = G[mid][0], v = G[mid][1];
        break;
      }
    }
    cout << "? " << u << " " << v << endl;
    int res;
    cin >> res;
    if (res == mid) {
      dfs(u, mid);
      dfs(v, mid);
    } else if (res == u) {
      dfs(mid, u);
    } else {
      dfs(mid, v);
    }
  }
  if (n - nowaycnt == 1) {
    for (int i = 1; i <= n; i++)
      if (noway[i] == 0) cout << "! " << i << endl;
  } else {
    cout << "? ";
    for (int i = 1; i <= n; i++)
      if (noway[i] == 0) cout << i << " ";
    cout << endl;
    int res;
    cin >> res;
    cout << "! " << res << endl;
  }
}
