int gauss(int r, int c) { bool flag=false; int coe=1; int i=0,t=0; for(int j=0; j<c; ++j) { int index=i; for(int k=i; k<r; ++k) if(a[k][j]>0) { index=k; break; } if(a[index][j]) { if(index != i) { for(int k=j; k<c; ++k) swap(a[i][k],a[index][k]); flag = !flag; } for(int k=i+1; k<r; ++k) if(a[k][j]) { coe=(coe*a[i][j])%MOD; ++ t; for(int l=c-1; l>=j; --l) { a[k][l]=(a[k][l]*a[i][j]-a[i][l]*a[k][j])%MOD; if(a[k][l]<0) a[k][l]+=MOD; } } ++i; } } for(i=1; i<MOD; ++i) if((coe*i)%MOD==1) break; int result=i; for(i=0; i<r; ++i) result=(result*a[i][i])%MOD; if(flag) result =MOD-result; return result; }