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