#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int WEIGHT = 2000 + 10;
const ll MOD = 1000000007;
const int HEIGHT = 1000 + 10;
struct matrix {
ll c[HEIGHT][WEIGHT];
matrix() {
memset(c, 0, sizeof(c));
}
} A, res;
ll n, k;
ll qpow(ll n, ll k) {
ll ans = 1;
while (k) {
if (k & 1)
ans = ans * n % MOD;
n = n * n % MOD;
k >>= 1;
}
return ans;
}
bool G_J() {
for (int i = 1; i <= n; ++i) {
int tmp = i;
for (int k = 1; k <= n; ++k) {
if (A.c[k][i] != 0) {
tmp = k;
break;
}
}
if (tmp == i) {
swap(A.c[tmp], A.c[i]);
}
if (A.c[i][i] == 0) {
return false;
}
int x = qpow(A.c[i][i], MOD - 2);
for (int k = 1; k <= n; ++k) {
if (k == i) {
continue;
}
int t = A.c[k][i] * x % MOD;
for (int j = i; j <= 2 * n; ++j) {
A.c[k][j] = ((A.c[k][j] - t * A.c[i][j]) % MOD + MOD) % MOD;
}
}
for (int k = 1; k <= n * 2; ++k) {
A.c[i][k] = (A.c[i][k] * x) % MOD;
}
}
return 1;
}
int main() {
cin >> n;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cin >> A.c[i][j];
}
A.c[i][i + n] = 1;
}
if (G_J()) {
for (int i = 1; i <= n; ++i) {
for (int j = n + 1; j <= 2 * n; ++j) {
cout << A.c[i][j] << " ";
}
cout << endl;
}
} else {
cout << "No Solution";
}
}