#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 998244353;
const ll root = 62;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll binpow(ll a, ll b) {
  ll res = 1;
  while (b) {
    if (b & 1) res = (res * a) % MOD;
    a = (a * a) % MOD;
    b >>= 1;
  }
  return res;
}
ll modInv(ll a) { return binpow(a, MOD - 2); }
const double PI = atan(1);
const double eps = 1e-10;
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;
const ll INFLL = 0x3f3f3f3f3f3f3f3f;
const ll NINFLL = 0xc0c0c0c0c0c0c0c0;
int ans = -1;
int cnt = 0;
vector<vector<int>> node;
int query(int k) {
  cnt++;
  cout << "? " << k << endl;
  int num;
  cin >> num;
  int a;
  for (auto i = (0); i < (num); ++i) {
    cin >> a;
    node[k].push_back(a);
  }
  if (num == 2) ans = k;
  return num;
}
void dfs(int u, int p, vector<int> &path) {
  int v = query(u);
  if (ans != -1) return;
  path.push_back(u);
  if (v == 1) return;
  if (node[u][0] == p) swap(node[u][0], node[u][1]);
  dfs(node[u][0], u, path);
}
int main() {
  mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  cin.tie(0)->sync_with_stdio(0);
  int T, h;
  cin >> T;
  vector<int> h1, h2;
  while (T--) {
    ans = -1;
    cnt = 0;
    cin >> h;
    for (auto i = (0); i < (node.size()); ++i) {
      node[i].clear();
    }
    node.clear();
    node.resize(1 << h);
    int q = query(1);
    pair<int, int> curr = {1, 0};
    if (q == 3) {
      h1.clear();
      h2.clear();
      dfs(node[1][0], 1, h1);
      dfs(node[1][1], 1, h2);
      if (ans != -1) {
        cout << "! " << ans << endl;
        goto cont;
      }
      if (h2.size() > h1.size()) swap(h1, h2);
      if (h1.size() == h2.size()) {
        curr = {1, h1.size()};
      } else {
        int diff = (h1.size() - h2.size()) / 2;
        curr = {h1[diff - 1], h2.size() + diff};
      }
    }
    if (ans != -1) {
      cout << "! " << ans << endl;
      goto cont;
    }
    while (1) {
      for (auto i = (0); i < (3); ++i) {
        if (node[node[curr.first][i]].size()) continue;
        h1.clear();
        dfs(node[curr.first][i], curr.first, h1);
        if (ans != -1) {
          cout << "! " << ans << endl;
          goto cont;
        }
        int diff = (h1.size() - curr.second) / 2;
        curr = {h1[diff - 1], curr.second + diff};
        break;
      }
      if (curr.second == h - 2) {
        for (auto i = (0); i < (3); ++i) {
          if (node[node[curr.first][i]].size()) continue;
          ans = node[curr.first][i];
        }
      }
      if (curr.second == h - 3) {
        int par = 0;
        for (auto i = (0); i < (3); ++i) {
          if (node[node[curr.first][i]].size()) continue;
          par = node[curr.first][i];
          query(par);
          break;
        }
        for (auto i = (0); i < (2); ++i) {
          query(node[par][i]);
        }
        if (ans == -1) {
          ans = node[par][2];
        }
      }
      if (curr.second == h - 4) {
        int par = 0;
        for (auto i = (0); i < (3); ++i) {
          if (node[node[curr.first][i]].size()) continue;
          par = node[curr.first][i];
          query(par);
          break;
        }
        int final = 0;
        for (auto i = (0); i < (3); ++i) {
          if (node[node[par][i]].size()) continue;
          int nxt = node[par][i];
          query(nxt);
          final++;
          for (auto j = (0); j < (3); ++j) {
            if (node[node[nxt][j]].size()) continue;
            int check = node[nxt][j];
            if (final == 5) {
              ans = (ans == -1 ? check : ans);
              break;
            }
            query(check);
            final++;
          }
        }
      }
      if (ans != -1) {
        cout << "! " << ans << endl;
        goto cont;
      }
    }
  cont:;
  }
  return 0;
}
