#include <bits/stdc++.h>
using namespace std;
int n;
struct zzz {
  int t, nex;
} e[2005 << 1];
int head[2005], tot;
void add(int x, int y) {
  e[++tot].t = y;
  e[tot].nex = head[x];
  head[x] = tot;
}
struct lca {
  int depth[2005], fa[2005][22], lg[2005];
  void dfs(int now, int fath) {
    fa[now][0] = fath;
    depth[now] = depth[fath] + 1;
    for (int i = 1; i <= lg[depth[now]]; ++i)
      fa[now][i] = fa[fa[now][i - 1]][i - 1];
    for (int i = head[now]; i; i = e[i].nex)
      if (e[i].t != fath) dfs(e[i].t, now);
  }
  int LCA(int x, int y) {
    if (depth[x] < depth[y]) swap(x, y);
    while (depth[x] > depth[y]) x = fa[x][lg[depth[x] - depth[y]] - 1];
    if (x == y) return x;
    for (int k = lg[depth[x]] - 1; k >= 0; --k)
      if (fa[x][k] != fa[y][k]) x = fa[x][k], y = fa[y][k];
    return fa[x][0];
  }
  void gg(int w) {
    for (int i = 1; i <= n; ++i) lg[i] = lg[i - 1] + (1 << lg[i - 1] == i);
    dfs(w, 0);
  }
} L[1005];
vector<int> V;
vector<int> B[2005];
int tp[1005];
int main() {
  cin >> n;
  for (int i = 1; i <= n - 1; ++i) {
    int x, y;
    cin >> x >> y;
    add(x, y);
    add(y, x);
    B[x].push_back(y);
    B[y].push_back(x);
    tp[x]++;
    tp[y]++;
  }
  int m = n / 2;
  while (m--) {
    V.clear();
    for (int i = 1; i <= n; i++) {
      if (tp[i] == 1) {
        V.push_back(i);
      }
    }
    if (V.size() < 2) break;
    int l = V[0];
    int r = V[1];
    printf("? %d %d\n", l, r);
    fflush(stdout);
    int pp;
    cin >> pp;
    if (pp == l || pp == r) {
      printf("! %d\n", pp);
      fflush(stdout);
      return 0;
    }
    tp[l] = -1;
    tp[r] = -1;
    for (int i = 0; i < B[l].size(); i++) {
      int test = B[l][i];
      tp[test]--;
    }
    for (int i = 0; i < B[r].size(); i++) {
      int test = B[r][i];
      tp[test]--;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (tp[i] >= 0) {
      printf("! %d\n", i);
      fflush(stdout);
      return 0;
    }
  }
  return 0;
}
