#include <bits/stdc++.h>
const int P = 998244353;
using namespace std;
template <typename T>
inline void ckmax(T &a, T b) {
  (a < b) && (a = b);
}
template <typename T>
inline void ckmin(T &a, T b) {
  (a > b) && (a = b);
}
inline int mul(int a, int b) { return 1ll * a * b % P; }
inline int add(int a, int b) { return a + b >= P ? a + b - P : a + b; }
inline int sub(int a, int b) { return a - b >= 0 ? a - b : a - b + P; }
inline void mulmod(int &a, int b) { a = mul(a, b); }
inline void addmod(int &a, int b) { ((a += b) >= P) && (a -= P); }
inline void submod(int &a, int b) { ((a -= b) < 0) && (a += P); }
inline int ksm(int a, int b) {
  int ans = 1;
  for (; b; b >>= 1) {
    if (b & 1) ans = 1ll * ans * a % P;
    a = 1ll * a * a % P;
  }
  return ans;
}
inline int inv(int a) { return ksm(a, P - 2); }
const int MN = 105;
int n;
vector<int> e[MN];
map<pair<int, int>, int> col, vis;
__int128 f[MN];
priority_queue<pair<__int128, int> > q;
int H(__int128 x) {
  for (int i = n; i >= 0; i--)
    if (x >> i & 1) return i;
  return -1;
}
void print(__int128 x) {
  for (int i = n; i >= 0; i--) {
    cerr << (int)(x >> i & 1);
  }
  cerr << endl;
}
const __int128 one = 1;
bool check(vector<int> g, __int128 now) {
  if (!g.size()) return 1;
  for (auto it : g) q.push(make_pair(f[it], it));
  for (int i = n; i >= 0; i--) {
    if (!(now >> i & 1)) continue;
    __int128 u = q.top().first;
    int id = q.top().second;
    q.pop();
    int h = H(u);
    if (h > i) break;
    if (h == i) u ^= (one << h), q.push(make_pair(u, id));
    if (q.empty()) return 1;
  }
  while (q.size()) q.pop();
  return 0;
}
void get(vector<int> g, __int128 now, int x) {
  if (!g.size()) return;
  for (auto it : g) q.push(make_pair(f[it], it));
  for (int i = n; i >= 0; i--) {
    if (!(now >> i & 1)) continue;
    __int128 u = q.top().first;
    int id = q.top().second;
    q.pop();
    int h = H(u);
    if (h == i)
      u ^= (one << h), q.push(make_pair(u, id));
    else
      col[make_pair(id, x)] = col[make_pair(x, id)] = i;
    if (q.empty()) return;
  }
  return;
}
void dfs1(int u, int fa) {
  __int128 now = 0;
  vector<int> tmp;
  for (auto v : e[u]) {
    if (v == fa) continue;
    dfs1(v, u);
    tmp.push_back(v);
  }
  for (int i = 0; i <= n; i++) now |= (one << i);
  for (int i = n; i >= 0; i--) {
    now ^= (one << i);
    if (!check(tmp, now)) now |= (one << i);
  }
  f[u] = now;
  get(tmp, now, u);
  for (auto v : e[u]) {
    if (v == fa) continue;
  }
}
int Ask(int u, int v) {
  cout << "?" << ' ' << u << ' ' << v << endl;
  fflush(stdout);
  int x;
  cin >> x;
  return x;
}
pair<int, int> now;
void dfs2(int u, int fa) {
  for (auto v : e[u]) {
    if (v == fa || vis[make_pair(u, v)]) continue;
    if (now.first == -1 || col[make_pair(u, v)] > col[now])
      now = make_pair(u, v);
    dfs2(v, u);
  }
}
int solve(int u) {
  now = make_pair(-1, -1);
  dfs2(u, 0);
  if (now.first == -1) return u;
  int nu = now.first, nv = now.second;
  vis[make_pair(nu, nv)] = vis[make_pair(nv, nu)] = 1;
  nu = Ask(nu, nv);
  return solve(nu);
}
int main() {
  cin >> n;
  for (int i = (1); i <= (n - 1); i++) {
    int u, v;
    cin >> u >> v;
    e[u].push_back(v), e[v].push_back(u);
  }
  dfs1(1, 0);
  int ans = solve(1);
  return cout << "!" << ' ' << ans << endl, 0;
}
