#include <bits/stdc++.h>
using namespace std;
int t, h, d[130];
int ecnt[130];
int e[130][3];
int prv[130];
int qry;
bool bad[130];
queue<int> q;
bool hasAns;
const int MAGIC = 1;
int ddist;
void ans(int x) {
  hasAns = 1;
  cout << "! " << x << endl;
}
void ask(int x) {
  if (ecnt[x] != 1e9) return;
  qry++;
  cout << "? " << x << endl;
  cin >> ecnt[x];
  for (int i = 0; i < ecnt[x]; i++) {
    int y;
    cin >> y;
    e[x][i] = y;
  }
}
int leaf0;
bool dfs(int x) {
  ask(x);
  if (ecnt[x] == 2) {
    ans(x);
    leaf0 = 0;
    return 1;
  }
  if (ecnt[x] == 1) {
    leaf0 = x;
    return 1;
  }
  if (d[x] < ddist) {
    for (int i = 0; i < ecnt[x]; i++) {
      if (d[e[x][i]] > d[x]) {
        d[e[x][i]] = d[x] + 1;
        if (dfs(e[x][i])) {
          if (d[x] == 0 && d[leaf0] == 3) continue;
          return 1;
        }
      }
    }
  }
  return 0;
}
void setbad(int x) {
  int t = d[x] / 2;
  while (d[x] > t) {
    bad[x] = 1;
    x = prv[x];
  }
}
bool isbad(int x) {
  while (d[x]) {
    if (bad[x]) return 1;
    x = prv[x];
  }
  return 0;
}
bool at2;
void setd(int x) {
  if (ecnt[x] != 1e9) {
    if (d[x] == 2 && ecnt[x] > 1) at2 = 1;
    for (int i = 0; i < ecnt[x]; i++) {
      if (d[e[x][i]] > d[x]) {
        d[e[x][i]] = d[x] + 1;
        prv[e[x][i]] = x;
        setd(e[x][i]);
      }
    }
    if (ecnt[x] == 1) setbad(x);
  } else
    q.push(x);
}
bool dfs2(int x) {
  if (isbad(x) || d[x] >= h) {
    return 0;
  }
  if (qry == 16) {
    ans(x);
    return 1;
  }
  ask(x);
  if (ecnt[x] == 2) {
    ans(x);
    return 1;
  }
  if (ecnt[x] == 1) {
    setbad(x);
    return 0;
  }
  if (d[x] >= h - 1) {
    return 0;
  }
  for (int i = 0; i < ecnt[x]; i++) {
    if (d[x] < d[e[x][i]]) {
      d[e[x][i]] = d[x] + 1;
      prv[e[x][i]] = x;
      if (dfs2(e[x][i])) return 1;
    }
  }
  return 0;
}
void go() {
  qry = 0;
  fill(d, end(d), 1e9);
  fill(ecnt, end(ecnt), 1e9);
  leaf0 = 1e9;
  hasAns = 0;
  cin >> h;
  d[MAGIC] = 0;
  ask(MAGIC);
  if (ecnt[MAGIC] == 2) {
    ans(MAGIC);
    return;
  }
  ddist = 2;
  dfs(MAGIC);
  if (hasAns) return;
  if (leaf0 == 1e9) {
    ddist = 3;
    dfs(MAGIC);
    if (hasAns) return;
  }
  if (leaf0 != 1e9) {
    fill(d, end(d), 1e9);
    fill(prv, end(prv), 1e9);
    d[leaf0] = 0;
    fill(bad, end(bad), 0);
    q = queue<int>();
    at2 = 0;
    setd(leaf0);
    while (q.size()) {
      int t = q.front();
      q.pop();
      if (d[t] >= h || isbad(t) || (at2 && d[t] == 2)) {
        continue;
      }
      if (qry == 16) {
        ans(t);
        return;
      }
      ask(t);
      if (ecnt[t] == 2) {
        ans(t);
        return;
      }
      if (ecnt[t] == 1) {
        setbad(t);
        continue;
      }
      if (d[t] >= h - 1) {
        continue;
      }
      if (d[t] == 4) {
        if (dfs2(t)) return;
      } else
        for (int i = 0; i < ecnt[t]; i++) {
          if (d[e[t][i]] > d[t]) {
            q.push(e[t][i]);
            d[e[t][i]] = d[t] + 1;
            prv[e[t][i]] = t;
          }
        }
    }
  }
  ans(1000);
}
int main() {
  cin >> t;
  while (t--) {
    go();
  }
  return 0;
}
