My XORgauss template
void gauss(int k) // k: the size of matrix
{
int r,c;// r: row
for(c=0,r=c;c<k;c++){ // c = col
int t=r;
for(int i=r+1;i<k;i++)
if(b[i][c]>b[t][c])
t=i;
if(!b[t][c]) continue;
swap(b[t],b[r]);
for(int i=r+1;i<k;i++)
if(b[i][c]){
b[i]^=b[r];
}
r++;
}
cout<<qmi(2,k-r)<<endl; // freenum
}