#include <bits/stdc++.h>
using namespace std;
const long long INF = 10000007, N = 1007;
set<long long> g[N];
long long sz[N];
set<long long> ask;
vector<long long> ord;
void dfs(long long v, long long p, long long delu, long long delv,
         long long f) {
  if (v == delu || v == delv) f = 1;
  for (auto u : g[v])
    if (u != p) dfs(u, v, delu, delv, f);
  if (f) ord.push_back(v);
}
void solve() {
  long long n;
  cin >> n;
  for (long long i = 0; i < (long long)n - 1; ++i) {
    long long u, v;
    cin >> u >> v;
    g[v].insert(u);
    g[u].insert(v);
  }
  for (long long i = 1; i <= (long long)n; ++i) ask.insert(i);
  while (ask.size() > 1) {
    long long u = -1, v = -1;
    for (long long i = 1; i <= (long long)n; ++i)
      if (g[i].size() == 1) (u == -1 ? u = i : v = i);
    cout << "? " << u << " " << v << endl;
    long long lca;
    cin >> lca;
    if (lca == u) {
      cout << "! " << u << endl;
      return;
    } else if (lca == v) {
      cout << "! " << v << endl;
      return;
    } else {
      dfs(lca, -1, u, v, 0);
      for (long long vv : ord) {
        for (auto uu : g[vv]) g[uu].erase(vv);
        g[vv].clear();
        ask.erase(vv);
      }
      ord.clear();
    }
  }
  cout << "! " << *ask.begin() << endl;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
  return 0;
}
