#include <bits/stdc++.h>
using namespace std;
int n;
int query(int u, int v) {
  printf("? %d %d\n", u, v);
  fflush(stdout);
  int ans;
  scanf("%d", &ans);
  return ans;
}
vector<int> G[2020];
void dfs(int v, int fa) {
  G[v].erase(remove(G[v].begin(), G[v].end(), fa), G[v].end());
  for (auto u : G[v]) dfs(u, v);
}
void dfs2(int v) {
  while (G[v].size() >= 2U) {
    int a = G[v][G[v].size() - 1], b = G[v][G[v].size() - 2], lca = query(a, b);
    if (lca == a) {
      dfs2(a);
      return;
    } else if (lca == b) {
      dfs2(b);
      return;
    } else
      G[v].pop_back(), G[v].pop_back();
  }
  if (G[v].size() == 0U) {
    printf("! %d\n", v);
    fflush(stdout);
    exit(0);
  }
  if (G[G[v][0]].size() == 0U) {
    int c = query(G[v][0], v);
    printf("! %d\n", c);
    fflush(stdout);
    exit(0);
  }
  int a = G[v][0], b = G[a].back(), lca = query(v, b);
  if (lca == v) {
    printf("! %d\n", v);
    fflush(stdout);
    exit(0);
  } else if (lca == a) {
    G[a].pop_back();
    dfs2(a);
  } else if (lca == b) {
    dfs2(b);
  } else
    assert(false);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; ++i) {
    static int u, v;
    scanf("%d%d", &u, &v);
    G[u].push_back(v);
    G[v].push_back(u);
  }
  dfs(1, -1);
  dfs2(1);
  return 0;
}
