#include <bits/stdc++.h>
using namespace std;
struct edge {
  int t;
  int v;
} e[1005 << 1];
int n, s, hd, tl, f[1005], q[1005], d[1005];
bool flag = false;
void add(int x, int y) {
  s++;
  e[s].t = f[x];
  e[s].v = y;
  f[x] = s;
}
int main() {
  int x, y, z;
  cin >> n;
  for (int i = 1; i < n; i++) {
    cin >> x >> y;
    add(x, y), add(y, x);
    d[x]++, d[y]++;
  }
  for (int i = 1; i <= n; i++)
    if (d[i] == 1) q[++tl] = i;
  for (int i = 1; i <= n / 2; i++) {
    x = q[++hd];
    y = q[++hd];
    cout << "? " << x << " " << y << endl;
    fflush(stdout);
    cin >> z;
    if (z == x || z == y) {
      flag = true;
      cout << "! " << z;
      break;
    }
    for (int j = f[x]; j != 0; j = e[j].t) {
      d[e[j].v]--;
      if (d[e[j].v] == 1) q[++tl] = e[j].v;
    }
    for (int j = f[y]; j != 0; j = e[j].t) {
      d[e[j].v]--;
      if (d[e[j].v] == 1) q[++tl] = e[j].v;
    }
  }
  if (!flag) cout << "! " << q[tl];
  return 0;
}
