[CF736D] Permutations

$$\det(A)=\sum_{c=1}^n a_{r,c}A_{r,c}$$

$$\sum_{c=1}^n a_{i,c}A_{j,c}=\det(A)\cdot [i=j]$$

$$A(A_{i,j})^T=\det(A)\cdot I_n$$

$$A^*=\det(A)\cdot A^{-1}$$

#include<iostream>
#include<cstring>
#include<cstdio>
#include<climits>
#include<algorithm>
#include<queue>
#include<vector>
#include<bitset>
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
using namespace std;
int f=1,ans=0; char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
return f*ans;
}
const int MAXN=2e3+11;
const int MAXM=5e5+11;
bitset<MAXN*2> A[MAXN];
int N,M,U[MAXM],V[MAXM];
void print(){printf("==========\n");for(int i=1;i<=N;i++){for(int j=1;j<=2*N;j++) cout<<A[i][j]<<" ";printf("\n");}printf("===========\n");}
void Gauss(){
for(int i=1;i<=N;i++){
int ps=0; for(int j=i;j<=N;j++) if(A[j][i]){ps=j;break;}
swap(A[i],A[ps]);
for(int j=1;j<=N;j++){
if(!A[j][i]||i==j) continue;
A[j]^=A[i];
}
}return;
}
int main(){
//freopen("2.in","r",stdin);
}