#include <bits/stdc++.h>
using namespace std;
vector<vector<long long> > graf;
long long nQueries;
vector<long long> Ask(long long v) {
  nQueries++;
  cout << "? " << v << "\n";
  fflush(stdout);
  vector<long long> res;
  long long k;
  cin >> k;
  if (k == 0) exit(0);
  graf[v].clear();
  for (long long i = 0; i < (k); i++) {
    long long x;
    cin >> x;
    graf[v].push_back(x);
    res.push_back(x);
  }
  return res;
}
vector<long long> GO(long long v, long long u) {
  vector<long long> subs = Ask(v);
  if (((long long)(subs).size()) == 1) return vector<long long>(1, v);
  for (long long i = 0; i < (((long long)(subs).size())); i++) {
    if (subs[i] == u)
      continue;
    else {
      vector<long long> res(GO(subs[i], v));
      res.push_back(v);
      return res;
    }
  }
  return vector<long long>();
}
bool Go2(long long v, long long u, long long depth, long long maxDepth) {
  if (depth > maxDepth) return false;
  vector<long long> subs = Ask(v);
  if (((long long)(subs).size()) == 1) return true;
  for (long long i = 0; i < (((long long)(subs).size())); i++) {
    if (subs[i] == u)
      continue;
    else {
      return Go2(subs[i], v, depth + 1, maxDepth);
    }
  }
  return true;
}
vector<long long> Complement(long long v, vector<long long> disc) {
  vector<long long> res;
  for (long long i = 0; i < (((long long)(graf[v]).size())); i++) {
    bool ok = true;
    for (long long j = 0; j < (((long long)(disc).size())); j++)
      if (graf[v][i] == disc[j]) ok = false;
    if (ok) res.push_back(graf[v][i]);
  }
  return res;
}
long long Complement(long long v, long long a, long long b) {
  vector<long long> temp(1, a);
  temp.push_back(b);
  return Complement(v, temp)[0];
}
void Ans(long long v) {
  cout << "! " << v << "\n";
  fflush(stdout);
}
int main() {
  cin.sync_with_stdio(0);
  long long nTests;
  cin >> nTests;
  for (long long test = 0; test < (nTests); test++) {
    long long height;
    cin >> height;
    if (height == 0) return 0;
    graf = vector<vector<long long> >(200, vector<long long>());
    nQueries = 0;
    vector<long long> subsFirst = Ask(1);
    vector<long long> path = GO(subsFirst[0], 1);
    vector<long long> pathB;
    if (((long long)(subsFirst).size()) > 1) pathB = GO(subsFirst[1], 1);
    path.push_back(1);
    for (long long j = ((long long)(pathB).size()) - 1ll; j >= (0ll); j--)
      path.push_back(pathB[j]);
    long long topV = path[((long long)(path).size()) / 2];
    if (((long long)(graf[topV]).size()) == 2) {
      Ans(topV);
      continue;
    }
    long long under = (((long long)(path).size()) - 1) / 2;
    long long predV = topV;
    topV = Complement(topV, path[((long long)(path).size()) / 2 - 1],
                      path[((long long)(path).size()) / 2 + 1]);
    under++;
    while (under < ((height + 1) / 2)) {
      Ask(topV);
      vector<long long> posSubs = Complement(topV, vector<long long>(2, predV));
      if (Go2(posSubs[0], topV, 1, under)) {
        predV = topV;
        topV = posSubs[1];
      } else {
        predV = topV;
        topV = posSubs[0];
      }
      under++;
    }
    queue<pair<long long, long long> > q;
    q.push(pair<long long, long long>(topV, predV));
    while (true) {
      long long v = q.front().first;
      long long u = q.front().second;
      q.pop();
      if (nQueries == 16 || ((long long)(Ask(v)).size()) == 2) {
        Ans(v);
        break;
      }
      for (long long j = 0; j < (((long long)(graf[v]).size())); j++) {
        if (graf[v][j] == u) continue;
        q.push(pair<long long, long long>(graf[v][j], v));
      }
    }
  }
  return 0;
}
