#include <bits/stdc++.h>
using namespace std;
const int mx = 1234;
vector<int> g[mx];
int root;
bool vis[mx];
int h;
vector<int> ask(int u) {
  cout << "? " << u << endl;
  int k;
  cin >> k;
  vector<int> ans(k);
  for (int i = 0; i < k; i++) cin >> ans[i];
  if (ans.size() == 2) root = u;
  g[u] = ans;
  vis[u] = true;
  return ans;
}
vector<int> walk(int u, int len) {
  vector<int> ans;
  while (root == 0 && int(ans.size()) < len) {
    vector<int> adj = ask(u);
    ans.push_back(u);
    for (int v : adj)
      if (!vis[v]) u = v;
    if (adj.size() == 1) break;
  }
  return ans;
}
int u, lyr;
vector<int> path;
void up() {
  u = path[path.size() / 2];
  lyr = h - path.size() / 2 - 1;
  for (int v : g[u])
    if (!vis[v]) {
      u = v;
      break;
    }
  if (lyr == 1) root = u;
}
void solve2(int x) {
  ask(x);
  vector<int> xy;
  for (int v : g[x])
    if (!vis[v]) xy.push_back(v);
  ask(xy[0]);
  if (!root) root = xy[1];
}
void solve() {
  u = 1;
  path = walk(u, mx);
  reverse(path.begin(), path.end());
  if (root) return;
  for (int v : g[u])
    if (!vis[v]) {
      vector<int> ux = walk(v, mx);
      path.insert(path.end(), ux.begin(), ux.end());
      break;
    }
  if (root) return;
  up();
  while (lyr > 3) {
    path.resize(h - lyr);
    vector<int> ux = walk(u, mx);
    path.insert(path.end(), ux.begin(), ux.end());
    up();
  }
  if (root) return;
  if (lyr == 2) {
    solve2(u);
  } else {
    ask(u);
    vector<int> xy;
    for (int v : g[u])
      if (!vis[v]) xy.push_back(v);
    int x = xy[0], y = xy[1];
    ask(x);
    for (int v : g[x])
      if (!vis[v]) {
        ask(v);
        if (root) return;
      }
    solve2(y);
  }
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    cin >> h;
    if (h == 1) {
      cout << "! 1" << endl;
      continue;
    }
    for (int i = 0; i < mx; i++) {
      g[i].clear();
      vis[i] = false;
    }
    root = 0;
    solve();
    cout << "! " << root << endl;
  }
  return 0;
}
