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; } };