#include<bits/stdc++.h>
#include"interactive.h"
using namespace std;
set<int> st[67],vv;
vector<int> getval(vector<int> vi,int n,int x)
{
vector<int> via=vi,vib=vi;
via.push_back(n);
via=get_pairwise_xor(via),vib=get_pairwise_xor(vib);
multiset<int> val;
for(auto v:via) val.insert(v);
for(auto v:vib) val.erase(val.lower_bound(v));
val.erase(val.lower_bound(0));
vector<int> ans;
for(int i=0;i<vi.size();i++)
{
int res=(*val.begin());
val.erase(val.lower_bound(res));
val.erase(val.lower_bound(res));
ans.push_back(res^x);
}
return ans;
}
vector<int> guess(int n)
{
vector<int> ans(n);
ans[n-1]=ask(n);
for(int i=0;(1<<i)<n;i++)
{
vector<int> idx;
for(int j=1;j<n;j++) if(j&(1<<i)) idx.push_back(j);
vector<int> val=getval(idx,n,ans[n-1]);
for(auto v:val) st[i].insert(v),vv.insert(v);
}
for(auto v:vv)
{
int mask=0;
for(int i=0;(1<<i)<n;i++) if(st[i].lower_bound(v)!=st[i].end()) mask|=(1<<i);
ans[mask-1]=v;
}
return ans;
}