#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) {
    if (ch == '-') f = -1;
  }
  for (; isdigit(ch); ch = getchar()) {
    x = x * 10 + ch - 48;
  }
  return x * f;
}
struct Query {
  int cnt, adj[4];
} qr[129];
vector<int> adj[129];
bool asked[129];
int n, q, tot;
void ask(int u) {
  tot++;
  asked[u] = true;
  qr[++q].adj[0] = u;
  cout << "? " << u << endl;
  cout.flush();
  cin >> qr[q].cnt;
  for (int i = 1; i <= qr[q].cnt; i++)
    cin >> qr[q].adj[i], adj[u].push_back(qr[q].adj[i]);
}
int dfs(int u, int prv, int dep) {
  ask(u);
  if (qr[q].cnt == 2) {
    cout << "! " << u << endl;
    cout.flush();
    return 1;
  }
  if (qr[q].cnt == 1) {
    return 0;
  }
  if (dep == 0) {
    return -1;
  }
  int v = qr[q].adj[1] == prv ? qr[q].adj[2] : qr[q].adj[1];
  return dfs(v, u, dep - 1);
}
int dfs2(int u, int prv, int dep) {
  if (!asked[u]) {
    if (tot == 16) {
      cout << "! " << u << endl;
      cout.flush();
      return 1;
    }
    ask(u);
    if (qr[q].cnt == 2) {
      cout << "! " << u << endl;
      cout.flush();
      return 1;
    }
  }
  if (dep == 0) return 0;
  for (int i = 0; i < adj[u].size(); i++) {
    int v = adj[u][i];
    if (v == prv) continue;
    int ret = dfs2(v, u, dep - 1);
    if (ret) return ret;
  }
  return 0;
}
int main() {
  int T;
  cin >> T;
  while (T--) {
    cin >> n;
    int u = 1, prv = 0, dep = 0;
    tot = 0;
    for (int i = 1; i < (1 << n); i++) asked[i] = false, adj[i].clear();
    q = -1;
    ask(u);
    if (qr[0].cnt == 2) {
      cout << "! " << u << endl;
      cout.flush();
    } else {
      bool quit = true;
      if (qr[0].cnt == 3) {
        if (dfs(qr[0].adj[1], u, n + n - 1) != 1) {
          int len1 = q;
          q++;
          qr[q] = qr[0];
          if (dfs(qr[0].adj[2], u, n + n - 1) != 1) {
            quit = false;
            reverse(qr + 1, qr + len1 + 1);
            int mid = (q + 1) >> 1;
            dep = n - 1 - mid;
            prv = qr[mid].adj[0];
            for (int i = 1; i <= qr[mid].cnt; i++) {
              if (qr[mid].adj[i] != qr[mid - 1].adj[0] &&
                  qr[mid].adj[i] != qr[mid + 1].adj[0]) {
                u = qr[mid].adj[i];
                break;
              }
            }
          }
        }
      } else {
        u = qr[0].adj[1];
        prv = 1;
        dep = n - 2;
        quit = false;
      }
      if (!quit) {
        while (1) {
          if (dep > 2) {
            q = -1;
            int sta = dfs(u, prv, dep);
            if (sta == 1) {
              break;
            } else if (sta == 0) {
              int delta = (q - (n - 1 - dep)) >> 1;
              dep -= delta + 1;
              prv = qr[delta].adj[0];
              for (int i = 1; i <= qr[delta].cnt; i++) {
                if (asked[qr[delta].adj[i]] == false) {
                  u = qr[delta].adj[i];
                  break;
                }
              }
            } else if (sta == -1) {
              u = qr[dep - 2].adj[0];
              dep = 2;
            }
          }
          if (dep <= 2) {
            dfs2(u, 0, 2);
            break;
          }
        }
      }
    }
  }
  return 0;
}
