#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1 << 8;
long long dep[maxn], vis[maxn], c1[maxn], c2[maxn], c3[maxn], c[maxn], s[maxn],
    up[maxn];
long long h;
void Try(long long x, long long from) {
  if (vis[x]) return;
  cout << "? " << x << endl;
  fflush(stdout);
  cin >> s[x];
  vis[x] = 1;
  c[x] = from;
  cin >> c1[x];
  if (s[x] > 1) cin >> c2[x];
  if (s[x] > 2) cin >> c3[x];
}
long long next(long long x, long long from) {
  Try(x, from);
  if (c1[x] != c[x])
    return c1[x];
  else if (c2[x] != c[x])
    return c2[x];
  else
    return c3[x];
}
long long next2(long long x, long long from) {
  Try(x, from);
  if (c3[x] != c[x])
    return c3[x];
  else if (c2[x] != c[x])
    return c2[x];
  else
    return c1[x];
}
long long solve(long long x) {
  if (s[x] == 2) return x;
  if (!dep[x]) {
    long long u1 = x, u2 = x, u3 = x;
    long long n1 = c1[x], n2 = c2[x], n3 = c3[x];
    dep[x] = h;
    while (s[u1] != 1 && s[u2] != 1 && s[u3] != 1) {
      long long l1 = u1, l2 = u2, l3 = u3;
      u1 = n1, u2 = n2, u3 = n3;
      n1 = next(u1, l1), n2 = next(u2, l2), n3 = next(u3, l3);
      if (s[u1] == 2) return u1;
      if (s[u2] == 2) return u2;
      if (s[u3] == 2) return u3;
      dep[x]--;
    }
    if (s[x] == 1)
      up[x] = c1[x], Try(up[x], x);
    else {
      if (s[u1] != 1)
        up[x] = c1[x];
      else if (s[u2] != 1)
        up[x] = c2[x];
      else
        up[x] = c3[x];
    }
    dep[up[x]] = dep[x] - 1;
    return solve(up[x]);
  }
  if (dep[x] == 2) {
    long long u = next(x, c[x]);
    long long v = next2(x, c[x]);
    Try(u, x);
    if (s[u] == 2)
      return u;
    else
      return v;
  } else if (dep[x] == 3) {
    long long u = next(x, c[x]);
    Try(u, x);
    long long v = next2(x, c[x]);
    Try(v, x);
    long long u1 = next(u, c[u]), u2 = next2(u, c[u]);
    long long v1 = next(v, c[v]), v2 = next2(v, c[v]);
    Try(u1, u), Try(u2, u), Try(v1, v);
    if (s[u1] == 2)
      return u1;
    else if (s[u2] == 2)
      return u2;
    else if (s[v1] == 2)
      return v1;
    else
      return v2;
  } else {
    long long u = x, lu = c[x], nu;
    for (long long i = 1; i <= h - dep[x]; i++) {
      nu = next(u, lu);
      if (s[u] == 2) return u;
      lu = u, u = nu;
    }
    Try(u, lu);
    if (s[u] == 2)
      return u;
    else {
      long long nx;
      if (s[u] == 3)
        nx = next(x, c[x]);
      else
        nx = next2(x, c[x]);
      Try(nx, x);
      dep[nx] = dep[x] - 1;
      return solve(nx);
    }
  }
}
int main() {
  long long T;
  cin >> T;
  while (T--) {
    memset(dep, 0, sizeof(dep));
    memset(vis, 0, sizeof(vis));
    memset(c, 0, sizeof(c));
    memset(c1, 0, sizeof(c1));
    memset(c2, 0, sizeof(c2));
    memset(c3, 0, sizeof(c3));
    memset(s, 0, sizeof(s));
    memset(up, 0, sizeof(up));
    cin >> h;
    if (h <= 4) {
      for (long long i = 1; i <= (1 << h) - 1; i++) {
        cout << "? " << i << endl;
        fflush(stdout);
        long long n;
        cin >> n;
        long long x;
        for (long long j = 1; j <= n; j++) {
          cin >> x;
        }
        if (n == 2) {
          cout << "! " << i << endl;
          break;
        }
      }
    } else {
      long long from = 1;
      Try(from, 0);
      cout << "!"
           << " " << solve(from) << endl;
    }
  }
  return 0;
}
