#include <bits/stdc++.h>
constexpr int N(105);
struct node : public std::bitset<N> {
  int id;
  node(void) : std::bitset<N>(), id(0) {}
  node(const std::bitset<N> &b, int i) : std::bitset<N>(b), id(i) {}
  bool operator<(const node &o) const {
    for (int i(N - 1); ~i; --i)
      if (test(i) != o.test(i)) return o.test(i);
    return 0;
  }
};
int lst(std::bitset<N> &x) {
  for (int i(N - 1); ~i; --i)
    if (x.test(i)) return i;
  return -1;
}
std::priority_queue<node> Q;
bool check(const std::bitset<N> &f, const std::vector<node> &vec) {
  Q = decltype(Q)(vec.begin(), vec.end());
  for (int i(N - 1), c; ~i; --i)
    if (f.test(i)) {
      static node u;
      u = Q.top(), Q.pop();
      c = lst(u);
      if (c > i)
        return 0;
      else if (c == i)
        u.flip(c), Q.push(u);
      if (!Q.size()) return 1;
    }
  return 0;
}
int pri[N][N];
std::vector<int> e[N];
std::bitset<N> dp[N];
std::priority_queue<node> Q2;
void DFS(int u, int fa) {
  std::vector<node> vec;
  for (int v : e[u])
    if (v ^ fa) DFS(v, u), vec.emplace_back(dp[v], v);
  if (!vec.size()) return;
  dp[u].set();
  for (int i(N - 1); ~i; --i) {
    dp[u].set(i, 0);
    if (!check(dp[u], vec)) dp[u].set(i);
  }
  Q = decltype(Q)(vec.begin(), vec.end());
  for (int i(N - 1), c; ~i; --i)
    if (dp[u].test(i)) {
      static node f;
      f = Q.top(), Q.pop();
      c = lst(f);
      if (c == i)
        assert(f.test(c)), f.flip(c), Q.push(f);
      else
        assert(c < i), pri[u][f.id] = pri[f.id][u] = i;
      if (!Q.size()) return;
    }
}
int px, py;
void locate(int u, int fa) {
  for (int v : e[u])
    if (v != fa && ~pri[u][v]) {
      pri[u][v] > pri[px][py] && (px = u, py = v);
      locate(v, u);
    }
}
int Ask(int x, int y) {
  static int z;
  printf("? %d %d\n", x, y);
  fflush(stdout);
  scanf("%d", &z);
  return z;
}
int main(void) {
  int n;
  scanf("%d", &n);
  for (int i(1), u, v; i < n; ++i) {
    scanf("%d%d", &u, &v);
    e[u].push_back(v);
    e[v].push_back(u);
  }
  memset(pri, 0xff, sizeof(pri));
  DFS(1, 0);
  for (int u(1);; u = Ask(px, py)) {
    px = py = 0, locate(u, 0);
    if (!px) return printf("! %d\n", u), 0;
    pri[px][py] = pri[py][px] = pri[0][0];
  }
  return 0;
}
