样例都过不去。
#include <iostream>
#define int long long
using namespace std;
const int N=600+5;
int n,a[N][N],p;
void swapw(int x,int y){
if (x==y) return;
for (int i=1;i<=n;++i) swap(a[x][i],a[y][i]);
}
void gcd(int x,int y,int id){//辗转相除消
int qwq;
while (a[x][id] && a[y][id]){
if (a[x][id]<=a[y][id]){
qwq=a[y][id]/a[x][id];
for (int i=1;i<=n;++i) a[y][i]=(a[y][i]-a[x][i]*qwq%p+p)%p;
}else{
qwq=a[x][id]/a[y][id];
for (int i=1;i<=n;++i) a[x][i]=(a[x][i]-a[y][i]*qwq%p+p)%p;
}
}
if (a[x][id]==0) swapw(x,y);//被反杀了
}
void solve(){//消元
for (int i=1;i<=n;++i){
int qaq=0;
for (int k=i;k<=n;++k)
if (a[k][i]){
qaq=k;
}
if (qaq){
swapw(qaq,i);
}else{
cout<<0<<"\n";
exit(0);
}
for (int k=i+1;k<=n;++k){
gcd(i,k,i);
}
// cout<<"\n";
// for (int i=1;i<=n;++i,cout<<"\n") for (int j=1;j<=n;++j) cout<<a[i][j]<<" ";
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n >> p;
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
cin >> a[i][j];
solve();
int ans=1;
// for (int i=1;i<=n;++i,cout<<"\n") for (int j=1;j<=n;++j) cout<<a[i][j]<<" ";
for (int i=1;i<=n;++i) ans=ans*a[i][i]%p;
cout<<ans<<"\n";
return 0;
}