代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N=1e3;
const int mod=1e9+7;
double eps=1e-8;
LL a[N][N];
int n;
LL quick(LL a,LL b,LL mod){
LL ans=1;
while(b){
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
int guss()
{
int c=1,r=1;
for(c=1,r=1;c<=n;c++)
{ int t=r;
for(int i=r+1;i<=n;i++) if(abs(a[i][c])>abs(a[t][c])) t=i;
if(!a[t][c]) continue;
for(int i=c;i<=2*n;i++) swap(a[r][i],a[t][i]);
LL k=quick(a[r][c],mod-2,mod);
for(int i=2*n;i>=c;i--) a[r][i]=(a[r][i]*k%mod+mod)%mod;
for(int i=r+1;i<=n;i++)
if(a[i][c])
{
for(int j=2*n;j>=c;j--)
a[i][j]=(a[i][j]-a[i][c]*a[r][j]%mod)%mod;
}
r++;
}
if(r<n+1) return 0;
for(int i=n-1;i>=1;i--)
for(int j=i+1;j<=n;j++)
if(a[i][j])
{
for(int k=n+1;k<=2*n;k++)
a[i][k]=(a[i][k]-a[i][j]*a[j][k]%mod)%mod;
}
return 1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=n+1;i<=2*n;i++)
a[i-n][i]=1;
int t=guss();
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=2*n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}*/
if(t==0) cout<<"No Solution"<<endl;
else{
for(int i=1;i<=n;i++)
{
for(int j=n+1;j<=2*n;j++)
cout<<(a[i][j]%mod+mod)%mod<<" ";
cout<<endl;
}
}
return 0;
}