#include <bits/stdc++.h>
inline int read() {
  int data = 0, w = 1;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') w = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') data = data * 10 + (ch ^ 48), ch = getchar();
  return data * w;
}
const int N(205);
int T, H, n, m, deg[N], son[N][3], a[N], b[N], ca, cb, f, cnt, t;
int Next(int x) {
  for (int i = 0; i < deg[x]; i++)
    if (!deg[son[x][i]]) return son[x][i];
  return 0;
}
void Query(int x) {
  if (deg[x]) return;
  ++cnt, printf("? %d\n", x), std::fflush(stdout), deg[x] = read();
  for (int i = 0; i < deg[x]; i++) son[x][i] = read();
}
int Go(int x, int *a, int &c) {
  c = 0;
  for (int i = x; i; i = Next(i)) {
    a[c++] = i, Query(i);
    if (deg[i] == 2) return i;
  }
  return 0;
}
int main() {
  for (T = read(); T--; std::fflush(stdout)) {
    H = read(), n = 1 << H, std::memset(deg, 0, n << 2), f = 1, cnt = 0;
    if ((t = Go(1, a, ca))) {
      printf("! %d\n", t);
      continue;
    }
    if ((t = Go(1, b, cb))) {
      printf("! %d\n", t);
      continue;
    }
    if (ca < cb) std::swap(ca, cb), std::swap(a, b);
    for (m = (ca + cb) >> 1; m < H - 3; m = (ca + m) >> 1)
      if ((t = Go(a[ca - m], a, ca))) {
        printf("! %d\n", t), f = 0;
        break;
      }
    if (!f) continue;
    a[1] = a[ca - m];
    for (int l = 1, r = 1; l <= r; ++l) {
      int x = a[l];
      if (cnt == 16) {
        printf("! %d\n", x);
        break;
      }
      Query(x);
      if (deg[x] == 2) {
        printf("! %d\n", x);
        break;
      }
      for (int i = 0; i < deg[x]; i++)
        if (!deg[son[x][i]]) a[++r] = son[x][i];
    }
  }
  return 0;
}
