#include <bits/stdc++.h>
using namespace std;
int Ask(int x, int y) {
  printf("? %d %d\n", x, y);
  fflush(stdout);
  int t;
  scanf("%d", &t);
  return t;
}
int vis[105], t[105], n;
struct bt {
  bitset<105> A;
  int id;
  int operator[](int x) { return A[x]; }
  friend bool operator<(bt x, bt y) {
    for (int i = n; ~i; i--)
      if (x[i] ^ y[i]) return x[i] < y[i];
    return 0;
  }
  int mx() {
    for (int i = n; ~i; i--)
      if (A[i]) return i;
    return -1;
  }
} dp[105];
map<pair<int, int>, int> val;
priority_queue<bt> q;
vector<int> e[105];
bool chk(vector<bt> f) {
  for (auto x : f) q.push(x);
  if (q.empty()) return 1;
  for (int i = n; ~i; i--)
    if (t[i]) {
      bt x = q.top();
      q.pop();
      int v = x.mx();
      if (v > i)
        break;
      else if (v == i)
        x.A[v] = 0, q.emplace(x);
      if (!q.size()) return 1;
    }
  while (q.size()) q.pop();
  return 0;
}
void produce(int u, vector<bt> f) {
  for (auto x : f) q.push(x);
  if (q.empty()) return;
  for (int i = n; ~i; i--)
    if (t[i]) {
      bt x = q.top();
      q.pop();
      int v = x.mx();
      if (v == i)
        x.A[v] = 0, q.emplace(x);
      else
        val[pair<int, int>(x.id, u)] = val[pair<int, int>(u, x.id)] = i;
      if (!q.size()) break;
    }
  while (q.size()) q.pop();
}
void dfs1(int u, int fa) {
  vector<bt> g;
  dp[u].id = u;
  for (int v : e[u])
    if (v != fa) dfs1(v, u), g.push_back(dp[v]);
  fill(t, t + n, 1);
  t[n] = 0;
  for (int i = n; ~i; i--, t[i] = 0)
    if (!chk(g)) t[i] = 1;
  for (int i = 0; i <= n; i++) dp[u].A[i] = t[i];
  produce(u, g);
}
pair<int, int> id;
void dfs2(int u, int fa, int &mx) {
  for (int v : e[u])
    if (!vis[v] && v != fa) {
      int k = val[pair<int, int>(u, v)];
      if (k > mx) mx = k, id = pair<int, int>(u, v);
      dfs2(v, u, mx);
    }
}
void solve(int u, int fa) {
  int mx = -1;
  dfs2(u, fa, mx);
  if (mx == -1) printf("! %d\n", u), fflush(stdout), exit(0);
  int res = Ask(id.first, id.second);
  if (res == id.first)
    vis[id.second] = 1, solve(id.first, id.second);
  else
    vis[id.first] = 1, solve(id.second, id.first);
}
int main() {
  scanf("%d", &n);
  for (int i = 1, u, v; i < n; i++)
    scanf("%d%d", &u, &v), e[u].emplace_back(v), e[v].emplace_back(u);
  dfs1(1, 0);
  solve(1, 0);
}
