#include <bits/stdc++.h>
using namespace std;
vector<int> g[1111];
int degree[1111], visited[1111];
set<int> s;
void dfs(int tt, int x) {
  s.erase(x);
  visited[x] = 1;
  int i;
  for (i = 0; i < g[x].size(); i++) {
    if (!visited[g[x][i]] && g[x][i] != tt) {
      visited[g[x][i]] = 1;
      dfs(tt, g[x][i]);
    }
  }
}
int main() {
  long long n, m, i, j;
  cin >> n;
  for (i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
    degree[x]++;
    degree[y]++;
  }
  for (i = 1; i <= n; i++) {
    if (degree[i] == 1) s.insert(i);
  }
  int temp;
  while (s.size() > 1) {
    set<int>::iterator it = s.begin();
    int temp1 = *it;
    it++;
    int temp2 = *it;
    printf("? %d %d\n", temp1, temp2);
    fflush(stdout);
    scanf("%d", &temp);
    if (temp == temp1 || temp == temp2) {
      cout << '!' << " " << temp;
      return 0;
    }
    dfs(temp, temp1);
    dfs(temp, temp2);
    degree[temp] -= 2;
    if (degree[temp] == 1) s.insert(temp);
  }
  cout << '!' << " " << temp;
}
