#include <bits/stdc++.h>
using namespace std;
const int _ = 1e2 + 7;
const int __ = 2e2 + 7;
int n, val[_], tmp[_];
int lst[_], nxt[__], to[__], id[__], tot;
bitset<_> num[_];
pair<int, int> e[_];
struct NODE {
  bitset<_> num;
  int id;
  bool operator<(const NODE &b) const {
    for (int k = n; k >= 1; --k)
      if (num[k] < b.num[k])
        return 1;
      else if (num[k] > b.num[k])
        return 0;
    return 0;
  }
};
priority_queue<NODE> h;
void Add(int x, int y, int k) {
  nxt[++tot] = lst[x];
  to[tot] = y;
  id[tot] = k;
  lst[x] = tot;
}
bool Check(bitset<_> X) {
  for (int k = n; k >= 1 and h.size(); --k)
    if (X[k]) {
      auto x = h.top();
      h.pop();
      if (x.num[k]) {
        if (h.size() and h.top().num[k]) return 0;
        x.num[k] = 0, h.push(x);
      } else
        tmp[x.id] = k;
    } else if (h.size() and h.top().num[k])
      return 0;
  if (h.size()) return 0;
  return 1;
}
void Dye(int u, int fa) {
  for (int i = lst[u]; i; i = nxt[i])
    if (to[i] != fa) Dye(to[i], u);
  for (int k = 1; k <= n; ++k) num[u][k] = 1;
  for (int k = n; k >= 1; --k) {
    num[u][k] = 0;
    while (!h.empty()) h.pop();
    for (int i = lst[u]; i; i = nxt[i])
      if (to[i] != fa) h.push({num[to[i]], id[i]}), tmp[id[i]] = 0;
    if (Check(num[u])) {
      for (int i = lst[u]; i; i = nxt[i])
        if (to[i] != fa) val[id[i]] = tmp[id[i]];
    } else
      num[u][k] = 1;
  }
  for (int k = 1; k <= n; ++k)
    for (int i = lst[u]; i; i = nxt[i])
      if (to[i] != fa) {
        if (k == val[id[i]])
          num[to[i]][k] = 1;
        else if (k < val[id[i]])
          num[to[i]][k] = 0;
      }
}
void Init() {
  cin >> n;
  for (int i = 1, x, y; i < n; ++i) {
    scanf("%d%d", &x, &y);
    Add(x, y, i), Add(y, x, i);
    e[i] = make_pair(x, y);
  }
  Dye(1, 0);
}
int xx, yy, sz, maxV;
bool vis[_];
void Dfs(int u, int fa) {
  ++sz;
  for (int i = lst[u]; i; i = nxt[i])
    if (to[i] != fa and !vis[to[i]]) {
      assert(val[id[i]] != maxV);
      if (val[id[i]] > maxV) xx = u, yy = to[i], maxV = val[id[i]];
      Dfs(to[i], u);
    }
}
void Run() {
  xx = 1;
  while (1) {
    maxV = sz = 0;
    Dfs(xx, 0);
    if (sz == 1) {
      cout << "! " << xx << endl;
      return;
    }
    cout << "? " << xx << ' ' << yy << endl;
    int tx = xx;
    cin >> xx;
    xx == tx ? vis[yy] = 1 : vis[tx] = 1;
  }
}
int main() {
  Init();
  Run();
  return 0;
}
