#include <bits/stdc++.h>
using namespace std;
const int MAX_H = 7;
const int MAX_N = 1 << MAX_H;
const int CNT = 16;
int ks[MAX_N], qs[MAX_N][4];
int pts[MAX_H * 2];
int qc = 0;
int query(int x) {
  if (!ks[x]) {
    printf("? %d\n", x + 1);
    fflush(stdout);
    scanf("%d", ks + x);
    if (ks[x] == 0) exit(0);
    for (int i = 0; i < ks[x]; i++) scanf("%d", qs[x] + i), qs[x][i]--;
    if (false) {
      printf("#query(%d)=%d", x, ks[x]);
      for (int i = 0; i < ks[x]; i++) printf(",%d", qs[x][i]);
      putchar('\n');
      fflush(stdout);
    }
  }
  return ks[x];
}
void answer(int x) {
  printf("! %d\n", x + 1);
  fflush(stdout);
}
int unvisited(int x) {
  for (int i = 0; i < ks[x]; i++)
    if (!ks[qs[x][i]]) return qs[x][i];
  return -1;
}
void printpath(int m) {
  printf("#pts(%d):", m);
  for (int i = 0; i < m; i++) {
    printf("%d", pts[i]);
    putchar(i + 1 < m ? ',' : '\n');
  }
  fflush(stdout);
}
int main() {
  int tn;
  scanf("%d", &tn);
  while (tn--) {
    qc = 0;
    int h;
    scanf("%d", &h);
    if (h == 0) break;
    int n = (1 << h) - 1;
    memset(ks, 0, sizeof(ks));
    if (n < CNT) {
      for (int i = 0; i < n; i++)
        if (query(i) == 2) {
          answer(i);
          break;
        }
      continue;
    }
    int m = 0;
    pts[m++] = 0;
    if (query(0) == 2) {
      answer(0);
      continue;
    }
    if (ks[0] == 1)
      pts[m++] = unvisited(0);
    else {
      for (int u = 0; query(u) == 3; pts[m++] = u = unvisited(u))
        ;
      if (ks[pts[m - 1]] == 2) {
        answer(pts[m - 1]);
        continue;
      }
      reverse(pts, pts + m);
    }
    for (int u = pts[m - 1]; query(u) == 3; pts[m++] = u = unvisited(u))
      ;
    if (ks[pts[m - 1]] == 2) {
      answer(pts[m - 1]);
      continue;
    }
    m = (m + 1) / 2;
    bool found = false;
    while (!found && m + 3 < h) {
      for (int u = pts[m - 1]; query(u) == 3; pts[m++] = u = unvisited(u))
        ;
      if (ks[pts[m - 1]] == 2) {
        answer(pts[m - 1]);
        found = true;
        break;
      }
      m = (m + 1) / 2;
    }
    if (!found) {
      int u = unvisited(pts[m - 1]);
      if (query(u) == 2) {
        answer(u);
        continue;
      }
      int v0 = unvisited(u);
      if (query(v0) == 2) {
        answer(v0);
        continue;
      }
      int v1 = unvisited(u);
      if (query(v1) == 2) {
        answer(v1);
        continue;
      }
      int w0 = unvisited(v0);
      if (query(w0) == 2) {
        answer(w0);
        continue;
      }
      int w1 = unvisited(v0);
      if (query(w1) == 2) {
        answer(w1);
        continue;
      }
      int w2 = unvisited(v1);
      if (query(w2) == 2) {
        answer(w2);
        continue;
      }
      int w3 = unvisited(v1);
      answer(w3);
    }
  }
  return 0;
}
