与正常高斯消元只有一点不同:
如果检查到了自由元,并不代表当前这个方程无用,不能跳过这个方程,而是应该跳过这个元。
std::bitset<MX> E[MX];
int solve(){
int ans = 1 ,r = 1;
for(int i = 1 ; i <= n ; ++i){
int Main = 0;
for(int j = r ; j <= n ; ++j){
if(E[j][i]){
Main = j;
break;
}
}
if(!Main){
ans = ans * 2 % MOD;
continue;
}
std::swap(E[Main] ,E[r]);
for(int j = 1 ; j <= n ; ++j){
if(r == j) continue;
if(E[j][i]) E[j] ^= E[r];
}
++r;
}
return ans;
}