#include #include using namespace std; #include #include template struct Matrix{ vector >dat; int N,M;//N x M matrix Matrix(){} Matrix(int N_):Matrix(N_,N_){} Matrix(int N_,int M_):N(N_),M(M_),dat(N_,vector(M_)){} vector&operator[](int i){return dat[i];} const vector&operator[](int i)const{return dat[i];} static Matrix eye(int N) { Matrix res(N); for(int i=0;i>=1)if(n&1)res=res*a; return res; } template Matrix operator+(const U&A)const { Matrix res(N,M); for(int i=0;i Matrix operator-(const U&A)const { Matrix res(N,M); for(int i=0;i Matrix operator*(const U&A)const { Matrix res(N,M); for(int i=0;iH[50],W[50]; int main() { int T;cin>>T; for(;T--;) { cin>>N>>P; int M=0; for(int i=0;i>A[i][j]; if(A[i][j]==-1)M++; } if(M==0) { mint::set_mod(P); MatrixB(N); for(int i=0;i=3)cout<<"0\n"; else { bool out=false; vectorzeroH,zeroW; for(int i=0;i=2||W[i].size()>=2)out=true; if(H[i].empty())zeroH.push_back(i); if(W[i].empty())zeroW.push_back(i); } if(out) { cout<<"0\n"; continue; } assert(zeroH.size()==zeroW.size()); mint::set_mod(P); MatrixB(zeroH.size()); for(int i=0;i