#include <bits/stdc++.h>
using namespace std;
const int inf = 100000000;
set<long long> tree[1003];
int n;
set<long long> s;
int main(void) {
  scanf("%lld", &n);
  for (long long i = 0; i < n - 1; i++) {
    long long u, v;
    scanf("%lld%lld", &u, &v);
    tree[u].insert(v);
    tree[v].insert(u);
  }
  for (long long i = 1; i <= n; i++) {
    if (tree[i].size() == 1) {
      s.insert(i);
    }
  }
  bool find = false;
  long long k = 0;
  long long fi = 0;
  while (find == false && fi < n / 2) {
    set<long long>::iterator ite, ite1, ite2;
    ite = s.begin();
    long long num1 = *ite++;
    long long num2 = *ite;
    long long lca;
    printf("? %lld %lld\n", num1, num2);
    fflush(stdout);
    scanf("%lld", &lca);
    ite = s.find(lca);
    if (ite != s.end() || fi == n / 2 - 1) {
      find = true;
      printf("! %lld", lca);
      fi = lca = 0;
      break;
    }
    s.erase(num1);
    s.erase(num2);
    ite = tree[num1].begin();
    ite1 = tree[*ite].begin();
    tree[num1].erase(*ite);
    tree[*ite].erase(num1);
    ite = tree[num2].begin();
    ite1 = tree[*ite].begin();
    tree[num2].erase(*ite);
    tree[*ite].erase(num2);
    for (long long i = 1; i <= n; i++) {
      if (tree[i].size() == 1) s.insert(i);
    }
    fi++;
  }
}
