#include <bits/stdc++.h>
using namespace std;
const int Maxn = 129;
int p[256];
int h;
vector<int> G[Maxn];
int use;
void ask(int u) {
  if (G[u].size() || u >= (1 << (h + 1))) return;
  use++;
  printf("? %d\n", u);
  fflush(stdout);
  int k;
  scanf("%d", &k);
  for (int i = 0; i < k; i++) {
    int tmp;
    scanf("%d", &tmp);
    G[u].push_back(tmp);
  }
}
void pt(int u) {
  printf("! %d\n", u);
  fflush(stdout);
}
int get(int u) {
  for (int x : G[u])
    if (!G[x].size()) return x;
  return -1;
}
void solve0(int u, int _h) {
  if (!_h) {
    pt(u);
    return;
  }
  ask(u);
  vector<int> tmp;
  for (int x : G[u]) {
    if (!G[x].size()) {
      if (_h == 1)
        tmp.push_back(x);
      else {
        ask(x);
        for (int v : G[x]) {
          if (!G[v].size()) tmp.push_back(v);
        }
      }
    }
  }
  int ret = tmp[0];
  for (int i = 1; i < tmp.size(); i++) {
    ask(tmp[i]);
    if (G[tmp[i]].size() == 2) {
      pt(tmp[i]);
      return;
    }
  }
  pt(ret);
}
void solve(int u, int _h) {
  if (_h <= 2) {
    solve0(u, _h);
    return;
  }
  ask(u);
  int fst = get(u), j = u;
  vector<int> sta;
  for (int i = 0; i < h - _h; i++) {
    j = get(j);
    ask(j);
    sta.push_back(j);
  }
  if (G[j].size() == 1) {
    solve(get(u), _h - 1);
  } else {
    while (sta.size()) {
      int v = sta.back();
      if (v == fst) break;
      G[v].clear();
      sta.pop_back();
    }
    solve(fst, _h - 1);
  }
}
int main() {
  int _;
  scanf("%d", &_);
  while (_--) {
    for (int i = 1; i <= 127; i++) G[i].clear();
    scanf("%d", &h);
    h--;
    if (h == 0) {
      pt(1);
      continue;
    }
    ask(1);
    if (G[1].size() == 2) {
      pt(1);
      continue;
    }
    if (G[1].size() == 1) {
      solve(get(1), h - 1);
      continue;
    }
    bool flag = 0;
    vector<int> all[2];
    for (int i = 0; i < 2; i++) {
      int cur = G[1][i];
      while (1) {
        ask(cur);
        all[i].push_back(cur);
        if (G[cur].size() != 3) break;
        cur = get(cur);
      }
      if (G[cur].size() == 2) {
        pt(cur);
        flag = 1;
        break;
      }
    }
    if (flag) continue;
    reverse(all[0].begin(), all[0].end());
    all[0].push_back(1);
    for (int x : all[1]) all[0].push_back(x);
    int sz = all[0].size();
    solve(get(all[0][sz / 2]), h - sz / 2 - 1);
  }
  return 0;
}
