#include <bits/stdc++.h>
using namespace std;
int n;
struct edge {
  int y, next;
} s[2010];
int first[1010], len = 0, mmax, pos;
bool tf[1010];
bool we = false;
void ins(int x, int y) {
  s[++len] = (edge){y, first[x]};
  first[x] = len;
}
void dfs_1(int x, int fa, int t, int& tmp) {
  if (t > mmax) mmax = t, tmp = x;
  for (int i = first[x]; i != 0; i = s[i].next)
    if (s[i].y != fa && tf[s[i].y]) dfs_1(s[i].y, x, t + 1, tmp);
}
void dfs_2(int x, int tar, int fa) {
  if (x == tar) {
    we = true;
    tf[fa] = false;
    return;
  }
  for (int i = first[x]; i != 0; i = s[i].next)
    if (s[i].y != fa) {
      dfs_2(s[i].y, tar, x);
      if (we) return;
    }
}
int main() {
  scanf("%d", &n);
  int x, y, w = 1;
  for (int i = 1; i < n; i++) scanf("%d %d", &x, &y), ins(x, y), ins(y, x);
  memset(tf, true, sizeof(tf));
  while (1) {
    mmax = 0;
    x = w;
    dfs_1(w, 0, 0, x);
    mmax = 0;
    y = x;
    dfs_1(x, 0, 0, y);
    if (x == y) {
      printf("! %d\n", x);
      return 0;
    }
    printf("? %d %d\n", x, y);
    cout.flush();
    scanf("%d", &w);
    we = false;
    dfs_2(x, w, 0);
    we = false;
    dfs_2(y, w, 0);
  }
}
