#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using lll = __int128_t;
const int N = 105;
int n;
vector<int> v[N];
void del(int x, int y) {
  v[x].erase(find(v[x].begin(), v[x].end(), y));
  v[y].erase(find(v[y].begin(), v[y].end(), x));
}
int f[N], rk[N];
lll dfs(int pos, int fa) {
  f[pos] = fa;
  vector<lll> vv;
  for (auto &i : v[pos])
    if (i != fa) vv.push_back(dfs(i, pos));
  if (vv.empty()) return 0;
  vector<int> ee(vv.size());
  auto chk = [&](lll x) {
    auto val = vv;
    int mxid = -1;
    lll mx;
    for (int i = N - 1; i >= 0; --i)
      if ((x >> i) & 1) {
        mx = -(lll(1) << N);
        for (int j = 0; j < int(vv.size()); j++)
          if (val[j] > mx) mx = val[j], mxid = j;
        ee[mxid] = i;
        val[mxid] -= lll(1) << i;
      }
    for (int j = 0; j < int(vv.size()); j++)
      if (val[j] >= 0) return 0;
    return 1;
  };
  lll tt = (lll(1) << N) - 1;
  for (int i = N - 1; i >= 0; --i)
    if (chk(tt - (lll(1) << i))) tt -= lll(1) << i;
  assert(chk(tt));
  int idx = 0;
  for (auto &i : v[pos])
    if (i != fa) rk[i] = ee[idx++];
  lll ret = 0;
  for (int i = 0; i < int(vv.size()); i++)
    ret |= vv[i] & (~((lll(1) << ee[i]) - 1)) | lll(1) << ee[i];
  return ret;
}
int xx;
inline void upd(int x, int y) {
  if (f[x] == y) swap(x, y);
  if (!xx || rk[y] > rk[xx]) xx = y;
}
void gete(int pos, int fa) {
  for (auto &i : v[pos])
    if (i != fa) gete(i, pos), upd(pos, i);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  int t1, t2;
  for (int i = 1; i < n; i++)
    cin >> t1 >> t2, v[t1].push_back(t2), v[t2].push_back(t1);
  dfs(1, 0);
  int x = 1;
  while (!v[x].empty()) {
    xx = 0;
    gete(x, 0);
    del(xx, f[xx]);
    cout << "? " << xx << ' ' << f[xx] << endl;
    cin >> x;
  }
  cout << "! " << x << endl;
  return 0;
}
