#include <bits/stdc++.h>
using namespace std;
string vow = "aeiou";
int month[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int dxhorse[] = {-2, -2, -1, -1, 1, 1, 2, 2};
const int dyhorse[] = {1, -1, 2, -2, 2, -2, 1, -1};
const int dx[] = {-1, 0, 1, 0, -1, -1, 1, 1};
const int dy[] = {0, 1, 0, -1, -1, 1, -1, 1};
const long double pie = 3.1415926535897932384626;
const long long mod = 1e9 + 7;
const int N = 1e3 + 10;
set<int> g[N];
int n;
void read() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    g[a].insert(b);
    g[b].insert(a);
  }
}
void solve(int test_case) {
  read();
  vector<int> leaf;
  for (int i = 1; i <= n; i++) {
    int deg = g[i].size();
    if (deg == 1) leaf.push_back(i);
  }
  while (leaf.size() > 1) {
    int a = leaf.back();
    leaf.pop_back();
    int b = leaf.back();
    leaf.pop_back();
    cout << "? " << a << " " << b;
    cout << endl;
    ;
    int lca;
    cin >> lca;
    if (lca == a || lca == b) {
      cout << "! " << lca;
      cout << endl;
      ;
      exit(0);
    }
    int aa = *g[a].begin();
    int bb = *g[b].begin();
    g[a].erase(aa);
    g[aa].erase(a);
    g[b].erase(bb);
    g[bb].erase(b);
    int deg_aa = g[aa].size();
    if (deg_aa <= 1) leaf.push_back(aa);
    int deg_bb = g[bb].size();
    if (deg_bb <= 1 && aa != bb) leaf.push_back(bb);
  }
  cout << "! " << leaf[0];
  cout << endl;
  ;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  for (int i = 1; i <= t; i++) {
    solve(i);
  }
  return 0;
}
