#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const long long mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int N = 1e3 + 10;
template <typename T>
void chkmax(T &x, T y) {
  x = max(x, y);
}
template <typename T>
void chkmin(T &x, T y) {
  x = min(x, y);
}
long long qpow(long long x, long long y, long long MOD) {
  long long a = 1;
  while (y) {
    if (y & 1) a = a * x % MOD;
    x = x * x % MOD;
    y >>= 1;
  }
  return a;
}
int n, du[N], del[N];
set<int> rem;
vector<int> g[N];
void out(int u, int v) { cout << "? " << u << " " << v << endl; }
int main() {
  cin >> n;
  for (int i = int(1); i <= int(n - 1); ++i) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v), g[v].push_back(u);
    du[v]++, du[u]++;
  }
  for (int i = int(1); i <= int(n); ++i)
    if (du[i] == 1) rem.insert(i);
  int w, cnt = 0;
  while (rem.size() > 1) {
    int u = *rem.begin();
    rem.erase(u);
    del[u] = 1;
    int v = *rem.begin();
    rem.erase(v);
    del[v] = 1;
    out(u, v), ++cnt;
    cin >> w;
    if (w == u || w == v) {
      cout << "! " << w << endl;
      return 0;
    }
    for (auto t : g[u]) {
      du[t]--;
      if (du[t] == 1 && !del[t]) rem.insert(t);
    }
    for (auto t : g[v]) {
      du[t]--;
      if (du[t] == 1 && !del[t]) rem.insert(t);
    }
    if (cnt == n / 2) break;
  }
  if (rem.size())
    cout << "! " << *rem.begin() << endl;
  else
    cout << "! " << w << endl;
  return 0;
}
