#include <bits/stdc++.h>
const int N = 150;
int h, dgr[N], son[N][3], A1[N], A2[N];
bool vis[N];
inline int read() {
  int now = 0;
  register char c = getchar();
  for (; !isdigit(c); c = getchar())
    ;
  for (; isdigit(c); now = now * 10 + c - '0', c = getchar())
    ;
  return now;
}
inline void Query(int x) {
  vis[x] = 1;
  printf("? %d\n", x), fflush(stdout);
  dgr[x] = read();
  for (int i = 0; i < dgr[x]; ++i) son[x][i] = read();
}
inline int Step(int x) {
  for (int i = 0; i < dgr[x]; ++i)
    if (!vis[son[x][i]]) return son[x][i];
  return son[x][0];
}
int Solve() {
  memset(vis, 0, sizeof vis);
  int h = read(), x = rand() % ((1 << h) - 1) + 1, dep;
  Query(x);
  if (dgr[x] == 2) return x;
  if (dgr[x] == 1)
    dep = 1;
  else {
    int cnt1 = 0, cnt2 = 0;
    for (int v = Step(x);; v = Step(v)) {
      Query(v), A1[++cnt1] = v;
      if (dgr[v] == 2) return v;
      if (dgr[v] == 1) break;
    }
    for (int v = Step(x);; v = Step(v)) {
      Query(v), A2[++cnt2] = v;
      if (dgr[v] == 2) return v;
      if (dgr[v] == 1) break;
    }
    dep = (cnt1 + cnt2 >> 1) + 1;
    if (cnt1 > cnt2)
      x = A1[cnt1 - dep + 1];
    else if (cnt1 < cnt2)
      x = A2[cnt2 - dep + 1];
  }
  for (int cnt = 0; dep < 4; cnt = 0) {
    for (int v = Step(x);; v = Step(v)) {
      Query(v), A1[++cnt] = v;
      if (dgr[v] == 2) return v;
      if (dgr[v] == 1) break;
    }
    dep = dep + cnt + 1 >> 1, x = A1[cnt - dep + 1];
  }
  int a, b, c, d, e;
  if (dep < h) {
    x = Step(x), Query(x);
    if (dgr[x] == 2) return x;
  }
  if (dep < h - 1) {
    a = Step(x), Query(a);
    if (dgr[a] == 2) return a;
    b = Step(x), Query(b);
    if (dgr[b] == 2) return b;
  }
  if (dep < h - 2) {
    c = Step(a), Query(c);
    if (dgr[c] == 2) return c;
    d = Step(a), Query(d);
    if (dgr[d] == 2) return d;
    e = Step(b), Query(e);
    if (dgr[e] == 2) return e;
    return Step(b);
  }
  return x;
}
int main() {
  for (int T = read(); T--; printf("! %d\n", Solve()), fflush(stdout))
    ;
  return 0;
}
