#include <bits/stdc++.h>
using namespace std;
int a[1000][5], b[1000], H, vis[1000], top;
void out(int x) {
  printf("! %d\n", x);
  fflush(stdout);
}
void ask(int x) {
  printf("? %d\n", x);
  fflush(stdout);
  b[++top] = x;
  vis[x] = 1;
}
void get(int x) {
  scanf("%d", &a[x][0]);
  for (int i = 1; i <= a[x][0]; i++) scanf("%d", &a[x][i]);
}
void nxt(int x) {
  for (int i = 1; i <= a[x][0]; i++)
    if (!vis[a[x][i]]) {
      ask(a[x][i]);
      break;
    }
}
void beg(int h, int x) {
  int i, y, nw;
  bool fl;
  if (h == 1) {
    out(b[x]);
    return;
  }
  if (h == 2) {
    for (i = 1; i <= a[x][0]; i++)
      if (!vis[a[x][i]]) {
        out(a[x][i]);
        return;
      }
  }
  for (i = 1; i <= a[x][0]; i++)
    if (!vis[a[x][i]]) {
      y = a[x][i];
      break;
    }
  ask(y);
  get(top);
  nw = top;
  if (h == 3) {
    for (i = 1; i <= a[nw][0]; i++)
      if (!vis[a[nw][i]]) {
        ask(a[nw][i]);
        get(top);
        if (a[top][0] == 2) {
          out(a[nw][i]);
          return;
        }
      }
  }
  if (h == 4) {
    for (i = 1; i <= a[nw][0]; i++)
      if (!vis[a[nw][i]]) {
        ask(a[nw][i]);
        get(top);
      }
    for (i = 1; i <= a[nw + 1][0]; i++)
      if (!vis[a[nw + 1][i]]) {
        ask(a[nw + 1][i]);
        get(top);
        if (a[top][0] == 2) {
          out(b[top]);
          return;
        }
      }
    fl = 0;
    for (i = 1; i <= a[nw + 2][0]; i++)
      if (!vis[a[nw + 2][i]]) {
        if (fl) {
          out(a[nw + 2][i]);
          return;
        }
        fl = 1;
        ask(a[nw + 2][i]);
        get(top);
        if (a[top][0] == 2) {
          out(b[top]);
          return;
        }
      }
  }
  for (i = 1; i <= H + 1 - h; i++) {
    nxt(top);
    get(top);
  }
  if (a[top][0] == 1)
    beg(h - 1, nw);
  else {
    for (i = 1; i <= a[nw][0]; i++)
      if (!vis[a[nw][i]]) vis[a[nw][i]] = 1;
    for (i = nw + 1; i <= top; i++) vis[b[i]] = 0;
    beg(h - 1, nw);
  }
}
int main() {
  int i, j, k, t, pos;
  scanf("%d", &t);
  while (t--) {
    memset(vis, 0, sizeof(vis));
    scanf("%d", &H);
    top = 0;
    ask(1);
    get(top);
    if (a[top][0] == 2) {
      out(1);
      continue;
    }
    if (a[top][0] == 1)
      beg(H, 1);
    else {
      ask(a[1][1]);
      while (1) {
        get(top);
        if (a[top][0] != 1)
          nxt(top);
        else
          break;
      }
      pos = top;
      ask(a[1][2]);
      while (1) {
        get(top);
        if (a[top][0] != 1)
          nxt(top);
        else
          break;
      }
      if (top - pos == pos - 1)
        beg(H - (pos - 1), 1);
      else if (top - pos > pos - 1)
        beg(H - (top - 1) / 2, (top + 1) / 2);
      else
        beg(H - (top - 1) / 2, (2 * pos - top + 1) / 2);
    }
  }
  return 0;
}
