#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<vector>
std::vector<std::vector<int>>buc;
std::vector<int>my_query(const int x){
if(!buc[x].empty())return buc[x];
std::cout<<'?'<<' '<<x<<'\n';
std::cout.flush();
int k;
std::cin>>k;
if(!k)exit(0);
buc[x].resize(k);
for(int i=0;i<k;i++)std::cin>>buc[x][i];
return buc[x];
}
void answer(const int x){
std::cout<<'!'<<' '<<x<<'\n';
std::cout.flush();
}
int find_leaf(int u,int from,std::vector<int>&ans){
ans.emplace_back(u);
for(bool flag=true;flag;){
flag=false;
std::vector<int>_u=my_query(u);
if((int)_u.size()==2)return u;
for(int v:_u)
if(v!=from){
from=u,u=v;
ans.emplace_back(u);
flag=true;
break;
}
}
return 0;
}
void solve(const int h){
int tmp;
buc.clear();
buc.resize(1<<h);
int lim=1<<h,a,b;
for(int i=1,cur;i<h;i++){
cur=i*(i+1)/2+(1<<(h-i))-2;
if(lim>cur)lim=cur,a=i,b=h-i;
}
int x=1;
my_query(x);
if((int)buc[x].size()==2)return answer(x);
std::vector<int>chain;
if((tmp=find_leaf(buc[x][0],x,chain)))return answer(tmp);
std::reverse(chain.begin(),chain.end());
if((tmp=find_leaf(x,buc[x][0],chain)))return answer(tmp);
while((int)chain.size()<2*a-1){
const int _h=((int)chain.size()+1)>>1,y=chain[_h-2],z=chain[_h];
chain.resize(_h);
x=chain.back();
if((tmp=find_leaf(buc[x][0]^buc[x][1]^buc[x][2]^y^z,x,chain)))return answer(tmp);
}
{
const int _h=((int)chain.size()+1)>>1,y=chain[_h-2],z=chain[_h];
chain.resize(_h);
x=chain.back();
std::vector<std::pair<int,int>>f,g;
f.emplace_back(buc[x][0]^buc[x][1]^buc[x][2]^y^z,x);
int cnt=(1<<(h-_h))-1;
for(int i=1;i<h;i++){
for(const std::pair<int,int>&p:f){
const int u=p.first,from=p.second;
if(!(--cnt)||(int)my_query(u).size()==2)return answer(u);
for(int v:buc[u])
if(v!=from)
g.emplace_back(v,u);
}
std::swap(f,g),g.clear();
}
}
return answer(-1);
}
int main(){
int t;
std::cin>>t;
for(int i=1,h;i<=t;i++){
std::cin>>h;
solve(h);
}
return 0;
}
580A- Kefa and First Steps | 1472B- Fair Division |
996A - Hit the Lottery | MSNSADM1 Football |
MATCHES Playing with Matches | HRDSEQ Hard Sequence |
DRCHEF Doctor Chef | 559. Maximum Depth of N-ary Tree |
821. Shortest Distance to a Character | 1441. Build an Array With Stack Operations |
1356. Sort Integers by The Number of 1 Bits | 922. Sort Array By Parity II |
344. Reverse String | 1047. Remove All Adjacent Duplicates In String |
977. Squares of a Sorted Array | 852. Peak Index in a Mountain Array |
461. Hamming Distance | 1748. Sum of Unique Elements |
897. Increasing Order Search Tree | 905. Sort Array By Parity |
1351. Count Negative Numbers in a Sorted Matrix | 617. Merge Two Binary Trees |
1450. Number of Students Doing Homework at a Given Time | 700. Search in a Binary Search Tree |
590. N-ary Tree Postorder Traversal | 589. N-ary Tree Preorder Traversal |
1299. Replace Elements with Greatest Element on Right Side | 1768. Merge Strings Alternately |
561. Array Partition I | 1374. Generate a String With Characters That Have Odd Counts |