#include <bits/stdc++.h>
using namespace std;
bool debug = 0;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
string direc = "RDLU";
long long ln, lk, lm;
void etp(bool f = 0) {
  puts(f ? "YES" : "NO");
  exit(0);
}
void addmod(int &x, int y, int mod = 1000000007) {
  x += y;
  if (x >= mod) x -= mod;
  assert(x >= 0 && x < mod);
}
void et() {
  puts("-1");
  exit(0);
}
int h, root, cnt;
int rsp[133][4];
vector<int> vp[2];
void qy(int x) {
  assert(x != 0);
  assert(rsp[x][0] == 0);
  cout << "? " << x << endl;
  cnt++;
  cin >> k;
  if (k == 0) exit(0);
  rsp[x][0] = k;
  for (int(i) = 1; (i) <= (int)(k); (i)++) {
    cin >> rsp[x][i];
  }
  if (k == 2) {
    root = x;
    throw 1;
  }
}
void dfs(int x, int pa, int id) {
  assert(x != 0);
  qy(x);
  vp[id].push_back(x);
  if (rsp[x][0] == 1) return;
  assert(rsp[x][0] == 3);
  for (int(i) = 1; (i) <= (int)(3); (i)++)
    if (rsp[x][i] != pa) {
      dfs(rsp[x][i], x, id);
      return;
    }
}
void fmain(int tid) {
  cin >> h;
  assert(h > 1);
  root = 0;
  memset(rsp, 0, sizeof rsp);
  int tar = 1, pa = 0, len = 0;
  cnt = 0;
  string S = "";
  while (1) {
    assert(rsp[tar][0] == 0);
    assert(tar != 0);
    qy(tar);
    if (rsp[tar][0] == 1) {
      pa = tar;
      tar = rsp[tar][1];
      len = 1;
      continue;
    }
    if (pa == 0) {
      vp[0].clear();
      dfs(rsp[tar][1], tar, 0);
      vp[1].clear();
      dfs(rsp[tar][2], tar, 1);
      len = vp[0].size() + vp[1].size();
      assert(len % 2 == 0);
      len /= 2;
      if (vp[1].size() < vp[0].size()) swap(vp[0], vp[1]);
      pa = tar;
      if (len != vp[0].size()) pa = vp[1][vp[1].size() - 1 - len];
      assert(rsp[pa][0] == 3);
      for (int(i) = 1; (i) <= (int)(3); (i)++)
        if (rsp[rsp[pa][i]][0] == 0) {
          tar = rsp[pa][i];
          break;
        }
    } else {
      int T;
      for (int(i) = 1; (i) <= (int)(3); (i)++)
        if (rsp[tar][i] != pa) {
          T = rsp[tar][i];
          break;
        }
      vp[0].clear();
      dfs(T, tar, 0);
      len = len + vp[0].size();
      assert(len % 2 == 0);
      len /= 2;
      if (len == vp[0].size()) {
        pa = tar;
      } else {
        pa = vp[0][vp[0].size() - 1 - len];
      }
      for (int(i) = 1; (i) <= (int)(3); (i)++)
        if (rsp[rsp[pa][i]][0] == 0) {
          tar = rsp[pa][i];
          break;
        }
    }
    assert(tar != 0);
    len++;
    if (debug) {
      S += to_string(len) + "-" + to_string(cnt) + "=";
    }
    if (len + 1 + 2 >= h) {
      qy(tar);
      vector<int> tmp;
      assert(rsp[tar][0] == 3);
      for (int(i) = 1; (i) <= (int)(3); (i)++)
        if (rsp[tar][i] != pa) tmp.push_back(rsp[tar][i]);
      assert(tmp.size() == 2);
      qy(tmp[0]);
      qy(tmp[1]);
      for (int(i) = 1; (i) <= (int)(rsp[tmp[0]][0]); (i)++)
        if (rsp[tmp[0]][i] != tar) {
          qy(rsp[tmp[0]][i]);
        }
      for (int(i) = 1; (i) <= (int)(rsp[tmp[1]][0]); (i)++)
        if (rsp[tmp[1]][i] != tar) {
          qy(rsp[tmp[1]][i]);
          break;
        }
      for (int(i) = 1; (i) <= (int)(rsp[tmp[1]][0]); (i)++)
        if (rsp[rsp[tmp[1]][i]][0] == 0) {
          root = rsp[tmp[1]][i];
          break;
        }
      return;
    }
  }
}
int main() {
  int t = 1;
  scanf("%d", &t);
  for (int(i) = 1; (i) <= (int)(t); (i)++) {
    debug = 0;
    try {
      fmain(i);
    } catch (int e) {
    }
    cout << "! " << root << endl;
  }
  return 0;
}
