#include <bits/stdc++.h>
using namespace std;
const int N = 2007;
set<pair<int, int> > E[N];
struct edge {
  int x, y;
} e[N];
int n, rk[N], mxrk, mxid;
void adde(int x, int y, int i) {
  E[x].insert(make_pair(y, i)), E[y].insert(make_pair(x, i));
}
void dele(int i) {
  int x = e[i].x, y = e[i].y;
  E[x].erase(make_pair(y, i)), E[y].erase(make_pair(x, i));
  printf("? %d %d\n", x, y), fflush(stdout);
}
bool check(vector<pair<__int128, int> > &ve, __int128 x) {
  priority_queue<pair<__int128, int> > q;
  for (auto u : ve) q.push(u);
  for (int i = n - 1; i >= 0; i--)
    if (x >> i & 1) {
      pair<__int128, int> v = q.top();
      q.pop();
      v.first -= __int128(1) << i, rk[v.second] = i;
      q.push(v);
    }
  return q.top().first < 0;
}
__int128 produce(vector<pair<__int128, int> > &ve) {
  if (!ve.size()) return 0;
  __int128 z = (__int128(1) << n) - 1;
  for (int i = n - 1; i >= 0; i--)
    if (check(ve, z - (__int128(1) << i))) z -= __int128(1) << i;
  check(ve, z);
  return z;
}
__int128 dfs(int v, int fa) {
  vector<pair<__int128, int> > ve;
  for (auto x : E[v]) {
    int u = x.first;
    if (u == fa) continue;
    ve.push_back(make_pair(dfs(u, v), x.second));
  }
  return produce(ve);
}
void find(int v, int fa) {
  for (auto x : E[v]) {
    int u = x.first, i = x.second;
    if (u == fa) continue;
    if (rk[i] > mxrk) mxrk = rk[i], mxid = i;
    find(u, v);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    adde(x, y, i), adde(y, x, i);
    e[i] = {x, y};
  }
  dfs(1, 0);
  int rt = 1;
  while (1) {
    mxrk = -1, mxid = 0;
    find(rt, 0);
    if (mxrk == -1) break;
    dele(mxid);
    scanf("%d", &rt);
  }
  printf("! %d\n", rt), fflush(stdout);
  return 0;
}
