#include <bits/stdc++.h>
using namespace std;
const int mxn = 1050;
vector<int> adj[mxn];
stack<int> le;
int n, u, v, x;
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    cin >> u >> v;
    u--;
    v--;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  for (int i = 0; i < n; i++)
    if (adj[i].size() == 1) le.push(i);
  while (le.size()) {
    if (le.size() == 1) {
      cout << "! " << le.top() + 1;
      return 0;
    }
    u = le.top();
    le.pop();
    v = le.top();
    le.pop();
    cout << "? " << u + 1 << " " << v + 1 << endl;
    cin >> x;
    x--;
    if (x == v) {
      cout << "! " << v + 1;
      return 0;
    } else if (x == u) {
      cout << "! " << u + 1;
      return 0;
    } else {
      int hlp;
      hlp = adj[u][0];
      int test3 = adj[v][0];
      if (adj[u][0] == adj[v][0]) {
        int ttt = adj[hlp].size();
        if (adj[hlp].size() < 4) le.push(hlp);
      } else {
        int test1 = adj[adj[u][0]].size(), test2 = adj[adj[v][0]].size();
        if (test1 < 3) le.push(adj[u][0]);
        if (test2 < 3) le.push(adj[v][0]);
      }
      for (int i = 0; i < adj[hlp].size(); i++)
        if (adj[hlp][i] == u) adj[hlp].erase(adj[hlp].begin() + i);
      adj[u].pop_back();
      hlp = adj[v][0];
      for (int i = 0; i < adj[hlp].size(); i++)
        if (adj[hlp][i] == v) adj[hlp].erase(adj[hlp].begin() + i);
      adj[v].pop_back();
    }
  }
  return 0;
}
