#include <bits/stdc++.h>
using namespace std;
inline int gi() {
  int data = 0, m = 1;
  char ch = 0;
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') {
    m = 0;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    data = (data << 1) + (data << 3) + (ch ^ 48);
    ch = getchar();
  }
  return (m) ? data : -data;
}
int K[200005], q[200005][5], que[5][200005], len[5], n, H, st, Deep, Case;
bool vis[200005];
int _cnt, pcnt;
bool flag;
inline void Answer(int x) {
  printf("! %d\n", x);
  fflush(stdout);
  flag = true;
  return;
}
inline void Query(int x) {
  if (K[x]) return;
  ++_cnt;
  printf("? %d\n", x);
  fflush(stdout);
  K[x] = gi();
  for (int j = 1; j <= K[x]; j++) q[x][j] = gi();
}
inline void work() {
  vis[st] = true;
  if (K[st] == 2)
    Answer(st);
  else if (K[st] == 1)
    Deep = H - 1, st = q[st][1], vis[st] = true;
  else {
    len[0] = len[1] = 0;
    int x = q[st][1];
    while (1989) {
      Query(x);
      que[0][++len[0]] = x;
      vis[x] = true;
      if (K[x] == 1) break;
      for (int j = 1; j <= K[x]; j++)
        if (!vis[q[x][j]]) x = q[x][j];
    }
    x = q[st][2];
    while (1989) {
      Query(x);
      que[1][++len[1]] = x;
      vis[x] = true;
      if (K[x] == 1) break;
      for (int j = 1; j <= K[x]; j++)
        if (!vis[q[x][j]]) x = q[x][j];
    }
    int Len = len[0] + len[1] + 1;
    len[2] = 0;
    while (len[1]) que[2][++len[2]] = que[1][len[1]--];
    que[2][++len[2]] = st;
    for (int j = 1; j <= len[0]; j++) que[2][++len[2]] = que[0][j];
    st = que[2][(Len + 1) / 2];
    Deep = H - Len / 2;
    if (Deep == 1) {
      Answer(st);
      return;
    }
    --Deep;
    for (int j = 1; j <= K[st]; j++) {
      if (!vis[q[st][j]]) {
        st = q[st][j];
        break;
      }
    }
  }
  return;
}
inline bool Check1(int u, int pt, int fm) {
  while (pt--) {
    Query(u);
    for (int j = 1; j <= K[u]; j++)
      if (q[u][j] != fm) fm = u, u = q[u][j];
  }
  return K[u] != 1;
}
inline bool Check2(int u) {
  Query(u);
  for (int j = 1; j <= K[u]; j++) {
    int x = q[u][j];
    if (vis[x]) continue;
    if (pcnt == 3) {
      Answer(x);
      return true;
    }
    Query(x);
    if (K[x] == 2) {
      Answer(x);
      return true;
    }
    ++pcnt;
  }
  return false;
}
void Dfs(int u, int deep) {
  if (flag) return;
  if (deep == 1) {
    Answer(u);
    return;
  }
  vis[u] = true;
  Query(u);
  if (deep > 3) {
    int dist = H - deep;
    for (int i = 1; i < K[u]; i++)
      if (!vis[q[u][i]] && Check1(q[u][i], dist, u)) {
        Dfs(q[u][i], deep - 1);
        return;
      }
    Dfs(q[u][K[u]], deep - 1);
  } else if (deep == 3) {
    pcnt = 0;
    for (int i = 1; i <= K[u]; i++)
      if (!vis[q[u][i]] && Check2(q[u][i])) return;
  } else if (deep == 2) {
    for (int i = 1; i < K[u]; i++)
      if (!vis[q[u][i]]) {
        Query(q[u][i]);
        if (K[q[u][i]] == 2) {
          Answer(q[u][i]);
          return;
        }
      }
    Answer(q[u][K[u]]);
  }
  return;
}
inline void Work() {
  for (int i = 0; i <= (1 << H); i++) vis[i] = false, K[i] = 0;
  _cnt = 0;
  flag = false;
  H = gi();
  if (H == 1) {
    Answer(1);
    return;
  }
  st = 1;
  Query(st);
  work();
  if (!flag) Dfs(st, Deep);
  return;
}
int main() {
  Case = gi();
  while (Case--) Work();
  return 0;
}
