#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define pb push_back
#define qr read()
#define LL long long
#define ff first
#define ss second
#define in inline
#define reg register
#define pa pair<int,int>
#define rep(i,a,b) for(int i = (a); i <= (b); i++)
#define per(i,a,b) for(int i = (a); i >= (b); i--)
using namespace std;
const int MAXN=0x3f3f3f3f;
const int MAXL=0x7ffff;
#define N 410
inline int read()
{
int x=0,k=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')k=-1;c=getchar();}
while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
return x*k;
}
int n,p;
LL a[N][N],e[N][N];
LL fp(LL A,int B)
{
LL ans = 1;
while(B)
{
if(B & 1)ans = ans * A % p;
A = A * A % p;
B >>= 1;
}
return ans;
}
int solve()
{
for(reg int i = 1; i <= n; i++)
{
reg int j = i,r = 0;
for(; j <= n; j++)
{
if(a[j][i] > a[r][i])r = j;
}
if(!r)return 0;
if(i!=r)swap(a[i],a[r]);if(i!=r)swap(e[i],e[r]);
int inv = fp(a[i][i],p - 2);
for(reg int k = 1; k <= n; k++)
{
if(k == i)continue;
int INV = a[k][i] * inv % p;
for(reg int j = 1; j <= n; j++)
{
e[k][j] = (e[k][j] - INV * e[i][j] % p + p) % p;
}
for(reg int j = i; j <= n; j++)
{
a[k][j] = (a[k][j] - INV * a[i][j] % p + p) % p;
}
}
for(reg int k = i; k <= n; k++)a[i][k] = a[i][k] * inv % p;
for(reg int k = 1; k <= n; k++)e[i][k] = e[i][k] * inv % p;
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
printf("%lld ",e[i][j]);
}
printf("\n");
}
return 1;
}
int main()
{
p = 1e9 + 7;
cin >> n;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%lld",&a[i][j]);
}
e[i][i] = 1;
}
if(solve())return 0;
cout << "No Solution";
}