#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 0x3f3f3f3f3f3f3f3fll;
const long long M = 1e9 + 7;
const long long maxn = 1 << 7 | 7;
const double pi = acos(-1.0);
const double eps = 0.00000001;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <typename T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline T powMM(T a, T b) {
  T ret = 1;
  for (; b; b >>= 1ll, a = (long long)a * a % M)
    if (b & 1) ret = (long long)ret * a % M;
  return ret;
}
int ans, cnt;
vector<int> A[maxn];
void get(int x) {
  if (A[x].size()) return;
  if (ans) return;
  cnt++;
  if (cnt == 17) ans = x;
  if (ans) return;
  printf("? %d\n", x);
  fflush(stdout);
  int n, i;
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    int y;
    scanf("%d", &y);
    A[x].push_back(y);
  }
  if (A[x].size() == 2) ans = x;
}
int dfs(int x, int f) {
  get(x);
  for (int v : A[x])
    if (v != f) return dfs(v, x) + 1;
  return 1;
}
int getnxt(int x, int f, int dep) {
  if (dep == 1) return x;
  for (int v : A[x])
    if (v != f) return getnxt(v, x, dep - 1);
  return 0;
}
int TaskA() {
  int n, m, i;
  fflush(stdout);
  scanf("%d", &n);
  m = 1 << n;
  ans = 0;
  cnt = 0;
  for (i = 0; i < m; i++) A[i].clear();
  int x = 1;
  get(x);
  if (A[x].size() == 1) x = A[x][0];
  dfs(x, 0);
  if (ans) return 0 * printf("! %d\n", ans);
  while (1) {
    pair<int, int> l_l, L_L;
    get(x);
    for (int v : A[x])
      if (A[v].size()) {
        l_l = make_pair(dfs(v, x), v);
        break;
      }
    for (int v : A[x])
      if (!A[v].size()) {
        L_L = make_pair(dfs(v, x), v);
        break;
      }
    if (ans) return 0 * printf("! %d\n", ans);
    if (l_l > L_L) swap(l_l, L_L);
    if (L_L.first != l_l.first)
      x = getnxt(L_L.second, x, (L_L.first - l_l.first) / 2);
    for (int v : A[x])
      if (!A[v].size()) {
        x = v;
        break;
      }
    if ((l_l.first + L_L.first) / 2 + 1 > n / 2) break;
  }
  queue<int> Q;
  Q.push(x);
  while (1) {
    int x = Q.front();
    get(x);
    Q.pop();
    for (int v : A[x])
      if (!A[v].size()) Q.push(v);
    if (ans) return 0 * printf("! %d\n", ans);
  }
  return 0;
}
void initialize() {}
int main() {
  int startTime = clock();
  initialize();
  fprintf(stderr, "/--- initializeTime: %ld milliseconds ---/\n",
          clock() - startTime);
  int T = 1;
  scanf("%d", &T);
  startTime = clock();
  while (T--) TaskA();
  fprintf(stderr, "/--- computeTime: %ld milliseconds ---/\n",
          clock() - startTime);
}
