struct Linear_base{
ll dp[63];
Linear_base(){me(dp,0);}
void insert(ll x){
for(int i=60;i>=0;i--){
if(x>>i&1){
if(!dp[i]){
dp[i]=x;break; //这一位可以***去退出.
}
x^=dp[i]; //这一位已经存在,继续往后面走.
}
}
}
ll Qmax(){
ll ans=0;
for(int i=60;i>=0;i--)if((ans^dp[i])>ans)ans^=dp[i];
return ans;
}
ll Qmin(){
for(int i=0;i<=60;i++)if(dp[i])return dp[i];
}
ll Qkmin(ll k){ //第k小
ll p[63]={0};
int cnt=0;
for(int i=60;i>=0;i--)
for(int j=i-1;j>=0;j--)if(dp[i]>>j&1)dp[i]^=dp[j];
for(int i=0;i<=60;i++)if(dp[i])p[cnt++]=dp[i];
ll res==0;
if(k>(1LL<<cnt))return -1;
for(int i=60;i>=0;i--){
if(k>>i&1)res^=p[i];
}
return res;
}
};