#include <bits/stdc++.h>
using namespace std;
template <class T>
void read(T &u) {
  u = 0;
  char c = getchar();
  int flag = 0;
  while (c < '0' || c > '9') flag |= (c == '-'), c = getchar();
  while (c >= '0' && c <= '9')
    u = (u << 3) + (u << 1) + (c ^ 48), c = getchar();
  if (flag) u = -u;
}
template <class T>
void write(T u) {
  if (u < 0) printf("-"), u = -u;
  if (u < 10)
    putchar(48 + u);
  else
    write(u / 10), putchar(48 + u % 10);
}
void write(char u) { putchar(u); }
template <class T, class... Arg>
void read(T &u, Arg &...v) {
  read(u);
  read(v...);
}
template <class T, class... Arg>
void write(T u, Arg... v) {
  write(u);
  write(v...);
}
template <class T>
bool checkmin(T &a, T b) {
  return (b < a ? a = b, 1 : 0);
}
template <class T>
bool checkmax(T &a, T b) {
  return (b > a ? a = b, 1 : 0);
}
template <class T>
T _min(T a, T b) {
  return (a < b ? a : b);
}
template <class T>
T _max(T a, T b) {
  return (a > b ? a : b);
}
const int N = 200005;
int n;
set<int> G[N];
void add_edge(int x, int y) { G[x].insert(y); }
void init() {
  read(n);
  for (int i = 1, x, y; i < n; ++i) {
    read(x, y);
    add_edge(x, y);
    add_edge(y, x);
  }
}
set<int> S;
set<int>::iterator it, it2;
void process(int x) {
  for (it = G[x].begin(); it != G[x].end(); ++it) {
    int to = *it;
    G[to].erase(x);
    if ((int)G[to].size() == 1) S.insert(to);
  }
  G[x].clear();
}
void solve() {
  for (int i = 1; i <= n; ++i) {
    if ((int)G[i].size() == 1) {
      S.insert(i);
    }
  }
  int p;
  while (1) {
    if ((int)S.size() == 1) {
      printf("! %d\n", *S.begin());
      fflush(stdout);
      return;
    }
    int x = *S.begin();
    S.erase(S.begin());
    int y = *S.begin();
    S.erase(S.begin());
    printf("? %d %d\n", x, y);
    fflush(stdout);
    scanf("%d", &p);
    if (x == p || y == p) {
      printf("! %d\n", p);
      return;
    }
    process(x);
    process(y);
  }
}
int main() {
  int T = 1;
  while (T--) {
    init();
    solve();
  }
  return 0;
}
