#include <bits/stdc++.h>
using namespace std;
const int inf = 1.01e9;
const double eps = 1e-9;
int A[222];
int A1[222];
int debug = 0;
int cnt = 0;
int h;
vector<int> mem[222];
int used[222];
int FOUND;
vector<int> ask(int x) {
  if (used[x]) return mem[x];
  used[x] = 1;
  vector<int> ans;
  if (debug) {
    int pos = A1[x];
    if (pos > 1) ans.push_back(A[pos / 2]);
    if (pos < (1LL << (h - 1))) {
      ans.push_back(A[pos * 2]);
      ans.push_back(A[pos * 2 + 1]);
    }
    random_shuffle((ans).begin(), ans.end());
    cnt++;
    assert(cnt <= 16);
  } else {
    printf("? %d\n", x);
    fflush(stdout);
    int k;
    scanf("%d", &k);
    if (!k) exit(0);
    for (int _ = 0; (_) < (k); ++_) {
      int xx;
      scanf("%d", &xx);
      ans.push_back(xx);
    }
  }
  mem[x] = ans;
  return ans;
}
void out(int x) {
  if (debug) {
    assert(x == A[1]);
    FOUND = 1;
  } else {
    printf("! %d\n", x);
    fflush(stdout);
  }
}
int brute(int x, int l, int pred, int last = 1) {
  if (l == 0 && last) {
    out(x);
    return 1;
  }
  vector<int> v = ask(x);
  if (((int)(v).size()) == 2) {
    out(x);
    return 1;
  }
  if (l > 0) {
    int was = 0;
    for (int z : v) {
      if (z != pred) {
        if (brute(z, l - 1, x, was * last)) return 1;
        was = 1;
      }
    }
  }
  return 0;
}
void go(int x, int l, int pred) {
  if (l == h - 1) {
    out(x);
    return;
  }
  if (l == h - 2) {
    vector<int> v = ask(x);
    int was = 0;
    for (int z : v) {
      if (z != pred) {
        if (was == 0) {
          vector<int> vv = ask(z);
          if (((int)(vv).size()) == 2) {
            out(z);
            return;
          }
          was = 1;
        } else {
          out(z);
          return;
        }
      }
    }
    assert(false);
  }
  if (l == h - 3) {
    brute(x, 2, pred);
    return;
  }
  vector<int> v = ask(x);
  int z1 = -1;
  for (int z : v) {
    if (z != pred) {
      if (z1 == -1) {
        z1 = z;
        break;
      }
    }
  }
  vector<int> path = {x};
  int pz1 = x;
  int WASz1 = z1;
  while (1) {
    path.push_back(z1);
    vector<int> vv = ask(z1);
    if (((int)(vv).size()) == 2) {
      out(z1);
      return;
    }
    if (((int)(vv).size()) == 1) break;
    if (((int)(path).size()) == l + 1) {
      go(WASz1, l + 1, x);
      return;
    }
    for (int zz : vv) {
      if (zz != pz1) {
        pz1 = z1;
        z1 = zz;
        break;
      }
    }
  }
  assert(((int)(path).size()) >= l + 1);
  int mid = path[(((int)(path).size()) + l) / 2 - l];
  int curlen = (((int)(path).size()) + l + 1) / 2;
  vector<int> vv = mem[mid];
  for (int zz : vv) {
    if (!used[zz]) {
      go(zz, curlen, mid);
      return;
    }
  }
}
void solve3(int x) {
  vector<int> v = ask(x);
  if (((int)(v).size()) == 2) {
    out(x);
    return;
  }
  int z1 = -1, z2 = -1;
  for (int z : v) {
    {
      if (z1 == -1) {
        z1 = z;
      } else
        z2 = z;
    }
  }
  vector<int> path = {x};
  int pz1 = x;
  int WASz1 = z1;
  while (1) {
    path.push_back(z1);
    vector<int> vv = ask(z1);
    if (((int)(vv).size()) == 2) {
      out(z1);
      return;
    }
    if (((int)(vv).size()) == 1) break;
    for (int zz : vv) {
      if (zz != pz1) {
        pz1 = z1;
        z1 = zz;
        break;
      }
    }
  }
  reverse((path).begin(), path.end());
  int pz2 = x;
  int WASz2 = z2;
  while (1) {
    path.push_back(z2);
    vector<int> vv = ask(z2);
    if (((int)(vv).size()) == 2) {
      out(z2);
      return;
    }
    if (((int)(vv).size()) == 1) break;
    for (int zz : vv) {
      if (zz != pz2) {
        pz2 = z2;
        z2 = zz;
        break;
      }
    }
  }
  int mid = path[(((int)(path).size())) / 2];
  int curlen = (((int)(path).size()) + 1) / 2;
  vector<int> vv = mem[mid];
  for (int zz : vv) {
    if (!used[zz]) {
      go(zz, curlen, mid);
      break;
    }
  }
}
void solve() {
  memset(used, 0, sizeof used);
  FOUND = 0;
  vector<int> v = ask(1);
  if (((int)(v).size()) == 1) {
    go(v[0], 1, 1);
  } else {
    solve3(1);
  }
  if (debug) {
    assert(FOUND);
  }
}
int main() {
  if (debug) {
    for (int it = 642; it <= 1000000; ++it) {
      srand(it);
      fprintf(stderr, "it = %d\n", it), fflush(stderr);
      h = 7;
      for (int i = 1; i < (1LL << (h)); ++i) A[i] = i;
      random_shuffle(A + 1, A + (1LL << (h)));
      for (int i = 1; i < (1LL << (h)); ++i) A1[A[i]] = i;
      cnt = 0;
      solve();
    }
  } else {
    int tn;
    scanf("%d", &tn);
    for (int tt = 0; (tt) < (tn); ++tt) {
      scanf("%d", &h);
      if (!h) exit(0);
      solve();
    }
  }
  return 0;
}
