#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b ostream &operator<<(ostream &os,const pair&p){ os< ostream &operator<<(ostream &os,const vector&v){ for(int i=0;i<(int)v.size();i++) os< istream &operator>>(istream &is,pair&p){ is>>p.first>>p.second; return is; } template istream &operator>>(istream &is,vector&v){ for(T &x:v)is>>x; return is; } // Aを変形してBにできるか <=> AとBの標準形が一致するか struct BinaryBasis{ vector basis; bool update; BinaryBasis():update(false){} // 基底に加える bool add(ll bit){ for(auto &p:basis) bit=min(bit,bit^p); if(bit){ basis.push_back(bit); return update=true; } else return false; } // bitを基底で表現できるか bool check(ll bit){ for(auto &p:basis) bit=min(bit,bit^p); return bit==0; } // 掃き出して標準形に void normalize(){ if(update){ sort(begin(basis),end(basis)); update=false; } for(int i=(int)basis.size()-1;i>=0;i--){ for(int j=i-1;j>=0;j--) basis[i]=min(basis[i],basis[i]^basis[j]); } } bool operator==(BinaryBasis &a){ normalize(),a.normalize(); return basis==a.basis; } // 0-indexedでk番目を返す ll get_kth(ll k){ if((1ll<=0;i--){ if(k<(1ll<>k>>x; int p; for(p=0;;p++){ if(k==0){ if((1ll<x){ cout<<"No"<x){ cout<<"No"< res; if(k!=0){ res.push_back(k); } for(int i=1;p;i++)if(i!=k)for(int j=0;j<2 and p>0;j++){ res.push_back(i); if(!basis.add(i))p--; } cout<<"Yes"<