#pragma once
#include<vector>usingnamespacestd;template<typenamemint>mintdeterminant_arbitrary_mod(vector<vector<mint>>a){intn=a.size();mintdet=1;for(intj=0;j<n;j++){for(inti=j;i<n;i++){if(a[i][j]==0)continue;if(i!=j)swap(a[i],a[j]),det=-det;break;}if(a[j][j]==0)return0;for(inti=j+1;i<n;i++){while(a[i][j]!=0){longlongq=a[j][j].get()/a[i][j].get();mintc=-q;for(intk=j;k<n;k++)a[j][k]+=a[i][k]*c;swap(a[i],a[j]),det=-det;}}}for(inti=0;i<n;i++)det*=a[i][i];returndet;}