#include <bits/stdc++.h>
using namespace std;
vector<int> nb[200];
bool vis[200];
vector<int> query(int x) {
  vector<int> ret;
  printf("? %d\n", x);
  fflush(stdout);
  int a, k;
  scanf("%d", &k);
  for (int i = 0; i < k; i++) {
    scanf("%d", &a);
    ret.push_back(a);
  }
  return ret;
}
int main() {
  int t, h;
  vector<int> n;
  scanf("%d", &t);
  while (t--) {
    scanf("%d", &h);
    for (int i = 1; i < (1 << h); i++) {
      nb[i].clear();
      vis[i] = 0;
    }
    int qtd = 0;
    int v = 1;
    vis[1] = 1;
    int folha = 0, sz = 0;
    int fase = 1;
    deque<int> path;
    while (qtd < 16) {
      n = query(v);
      qtd++;
      sz++;
      if (n.size() == 2) {
        printf("! %d\n", v);
        fflush(stdout);
        break;
      }
      if (folha == 0)
        path.push_back(v);
      else if (folha == 1)
        path.push_front(v);
      nb[v] = n;
      if (n.size() == 1) {
        folha++;
        if (folha == 1) {
          for (int x : nb[1]) {
            if (!vis[x]) {
              vis[x] = 1;
              v = x;
              break;
            }
          }
          continue;
        }
        sz /= 2;
        int tam_path = sz;
        for (int i = 0; i < tam_path; i++) path.pop_back();
        v = path.back();
        for (int x : nb[v])
          if (!vis[x]) {
            v = x;
            vis[v] = 1;
            folha--;
            sz++;
            break;
          }
        if (tam_path >= 3) {
          fase = 2;
          break;
        }
      } else {
        for (int x : n) {
          if (!vis[x]) {
            vis[x] = 1;
            v = x;
            break;
          }
        }
      }
    }
    if (fase == 1) continue;
    queue<int> Q;
    Q.push(v);
    bool found = 0;
    while (qtd < 16 && !Q.empty()) {
      int x = Q.front();
      Q.pop();
      n = query(x);
      qtd++;
      if (n.size() == 2) {
        printf("! %d\n", x);
        fflush(stdout);
        found = 1;
        break;
      }
      vis[x] = 1;
      for (int i = 0; i < 3; i++) {
        if (vis[n[i]]) continue;
        vis[n[i]] = 1;
        Q.push(n[i]);
      }
    }
    if (!found) {
      printf("! %d\n", Q.front());
      fflush(stdout);
    }
  }
  return 0;
}
