#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > adj;
int n;
bool check_one() {
  int cnt = 0;
  for (int i = 1; i <= n; i++) {
    if (adj[i].size() > 1) {
      cnt++;
    }
    if (cnt > 1) return 1;
  }
  return 0;
}
void del(int node, int par) {
  for (auto it = adj[node].begin(); it != adj[node].end(); it++) {
    if (*it != par) {
      del(*it, node);
    }
  }
  adj[node].clear();
  return;
}
int main() {
  cin >> n;
  adj.resize(n + 1);
  int x, y;
  int ans;
  for (int i = 0; i < n - 1; i++) {
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  while (1) {
    if (check_one()) {
      for (int i = 1; i <= n; i++) {
        if (adj[i].size() > 1) {
          for (auto it = adj[i].begin(); it != adj[i].end(); it++) {
            if (adj[*it].size() > 1) {
              cout << "? " << i << " " << *it << endl;
              cin >> ans;
              if (ans == i) {
                del(*it, ans);
                auto y = find(adj[ans].begin(), adj[ans].end(), *it);
                adj[ans].erase(y);
              } else {
                del(i, ans);
                auto y = find(adj[ans].begin(), adj[ans].end(), i);
                adj[ans].erase(y);
              }
              break;
            }
          }
          break;
        }
      }
      cout.flush();
    } else {
      int f = -1, s = -1;
      for (int i = 1; i <= n; i++) {
        if (adj[i].size() == 1 && f == -1)
          f = i;
        else if (adj[i].size() == 1) {
          s = i;
          break;
        }
      }
      if (f == -1 && s == -1) {
        cout << "! " << ans << endl;
        break;
      }
      cout << "? " << f << " " << s << endl;
      cin >> ans;
      if (ans == f) {
        cout << "! " << f << endl;
        break;
      } else if (ans == s) {
        cout << "! " << s << endl;
        break;
      } else {
        adj[ans].erase(find(adj[ans].begin(), adj[ans].end(), f));
        adj[ans].erase(find(adj[ans].begin(), adj[ans].end(), s));
        adj[f].clear();
        adj[s].clear();
        cout.flush();
      }
    }
  }
}
