#include <bits/stdc++.h>
using std::bitset;
using std::pair;
using std::priority_queue;
using std::vector;
int n, ok[105], sz[105], tot, first, second, mx, tp;
int rs[105];
vector<int> e[105], val[105], id;
bitset<105> bs[105], cur, stk[105];
inline int gmx(const bitset<105> &a) {
  int first = n;
  while (~first && !a[first]) --first;
  return first;
}
bool operator<(const bitset<105> &a, const bitset<105> &b) {
  return a.to_string() < b.to_string();
}
struct cmp {
  bool operator()(const bitset<105> &a, const bitset<105> &b) { return a < b; }
};
priority_queue<bitset<105>, vector<bitset<105>>, cmp> q;
void proc(int u) {
  auto &b = bs[u];
  cur.reset();
  tp = 0;
  for (int first : id) stk[++tp] = bs[first];
  for (int i = 1; i <= tp; ++i) {
    int j = 0;
    while (stk[i][j]) stk[i][j] = 0, ++j;
    stk[i][j] = 1;
  }
  for (int i = sz[u]; ~i; --i) {
    while (!q.empty()) q.pop();
    for (int j = 1; j <= tp; ++j)
      if (stk[j].count()) q.push(stk[j]);
    for (int j = i - 1; ~j && !q.empty(); --j) {
      if (gmx(q.top()) < j)
        q.pop();
      else if (gmx(q.top()) > j)
        break;
      else {
        auto first = q.top();
        q.pop();
        first.flip(j);
        if (first.count()) q.push(first);
      }
    }
    if (!q.empty()) {
      b.set(i);
      int id = 0;
      for (int j = 1; j <= tp; ++j)
        if (stk[id] < stk[j]) id = j;
      if (stk[id].count() == 1 || gmx(stk[id]) < i)
        rs[id] = i, stk[id].reset();
      else
        stk[id].flip(i);
    }
  }
}
void dfs(int u, int fa) {
  sz[u] = 1;
  for (int v : e[u])
    if (v != fa) dfs(v, u), sz[u] += sz[v];
  id.clear();
  for (int v : e[u])
    if (v != fa) id.push_back(v);
  proc(u);
  int c = 0;
  for (int v : e[u])
    if (v != fa) {
      val[u].push_back(rs[c + 1]);
      ++c;
    } else
      val[u].push_back(-1);
}
void grt(int u, int fa) {
  int c = 0;
  for (int v : e[u])
    if (v != fa) {
      if (ok[v]) {
        grt(v, u);
        if (val[u][c] > mx) mx = val[u][c], first = u, second = v;
      }
      ++c;
    } else
      ++c;
}
void del(int u, int fa) {
  ok[u] = 0, --tot;
  for (int v : e[u])
    if (v != fa && ok[v]) del(v, u);
}
int main() {
  scanf("%d", &n);
  for (int i = 1, first, second; i < n; ++i)
    scanf("%d%d", &first, &second), e[first].push_back(second),
        e[second].push_back(first);
  tot = n;
  dfs(1, 0);
  std::fill(ok + 1, ok + n + 1, 1);
  int pr = 1;
  while (tot > 1) {
    mx = -1;
    grt(pr, 0);
    printf("? %d %d\n", first, second);
    fflush(stdout);
    int t;
    scanf("%d", &t);
    if (t == first) std::swap(first, second);
    del(first, second);
    pr = second;
  }
  printf("! %d\n", pr);
  return 0;
}
