#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool isPerfectSquare(ll x) {
if (x < 0) return false;
ll r = sqrt((long double)x);
while (r * r < x) ++r;
while (r * r > x) --r;
return r * r == x;
}
bool isPrime(ll x) {
if (x < 2) return false;
if (x % 2 == 0) return x == 2;
for (ll i = 3; i * i <= x; i += 2) {
if (x % i == 0) return false;
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
vector<vector<int>> a(N + 1, vector<int>(N + 1));
vector<ll> row(N + 1, 0), col(N + 1, 0);
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= N; ++j) {
cin >> a[i][j];
row[i] += a[i][j];
col[j] += a[i][j];
}
}
ll diag1 = 0, diag2 = 0;
for (int i = 1; i <= N; ++i) {
diag1 += a[i][i];
diag2 += a[i][N - i + 1];
}
bool ok = true;
// Điều kiện 1
if (row[1] != row[N]) ok = false;
if (!isPerfectSquare((row[1] + row[N]) * 2LL)) ok = false;
// Điều kiện 2
if (col[1] == col[N]) ok = false;
if (!isPrime(col[1] + col[N])) ok = false;
if (N % 2 == 0) {
int mid = N / 2;
if (!isPerfectSquare(row[mid] * col[mid])) ok = false;
if (diag1 == diag2) ok = false;
} else {
int mid = (N + 1) / 2;
if (!isPrime(row[mid] + col[mid])) ok = false;
if (diag1 != diag2) ok = false;
}
cout << (ok ? "Yes" : "No") << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmJvb2wgaXNQZXJmZWN0U3F1YXJlKGxsIHgpIHsKICAgIGlmICh4IDwgMCkgcmV0dXJuIGZhbHNlOwogICAgbGwgciA9IHNxcnQoKGxvbmcgZG91YmxlKXgpOwogICAgd2hpbGUgKHIgKiByIDwgeCkgKytyOwogICAgd2hpbGUgKHIgKiByID4geCkgLS1yOwogICAgcmV0dXJuIHIgKiByID09IHg7Cn0KCmJvb2wgaXNQcmltZShsbCB4KSB7CiAgICBpZiAoeCA8IDIpIHJldHVybiBmYWxzZTsKICAgIGlmICh4ICUgMiA9PSAwKSByZXR1cm4geCA9PSAyOwogICAgZm9yIChsbCBpID0gMzsgaSAqIGkgPD0geDsgaSArPSAyKSB7CiAgICAgICAgaWYgKHggJSBpID09IDApIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IE47CiAgICBjaW4gPj4gTjsKCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGEoTiArIDEsIHZlY3RvcjxpbnQ+KE4gKyAxKSk7CiAgICB2ZWN0b3I8bGw+IHJvdyhOICsgMSwgMCksIGNvbChOICsgMSwgMCk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gTjsgKytqKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICByb3dbaV0gKz0gYVtpXVtqXTsKICAgICAgICAgICAgY29sW2pdICs9IGFbaV1bal07CiAgICAgICAgfQogICAgfQoKICAgIGxsIGRpYWcxID0gMCwgZGlhZzIgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgKytpKSB7CiAgICAgICAgZGlhZzEgKz0gYVtpXVtpXTsKICAgICAgICBkaWFnMiArPSBhW2ldW04gLSBpICsgMV07CiAgICB9CgogICAgYm9vbCBvayA9IHRydWU7CgogICAgLy8gxJBp4buBdSBraeG7h24gMQogICAgaWYgKHJvd1sxXSAhPSByb3dbTl0pIG9rID0gZmFsc2U7CiAgICBpZiAoIWlzUGVyZmVjdFNxdWFyZSgocm93WzFdICsgcm93W05dKSAqIDJMTCkpIG9rID0gZmFsc2U7CgogICAgLy8gxJBp4buBdSBraeG7h24gMgogICAgaWYgKGNvbFsxXSA9PSBjb2xbTl0pIG9rID0gZmFsc2U7CiAgICBpZiAoIWlzUHJpbWUoY29sWzFdICsgY29sW05dKSkgb2sgPSBmYWxzZTsKCiAgICBpZiAoTiAlIDIgPT0gMCkgewogICAgICAgIGludCBtaWQgPSBOIC8gMjsKICAgICAgICBpZiAoIWlzUGVyZmVjdFNxdWFyZShyb3dbbWlkXSAqIGNvbFttaWRdKSkgb2sgPSBmYWxzZTsKICAgICAgICBpZiAoZGlhZzEgPT0gZGlhZzIpIG9rID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICAgIGludCBtaWQgPSAoTiArIDEpIC8gMjsKICAgICAgICBpZiAoIWlzUHJpbWUocm93W21pZF0gKyBjb2xbbWlkXSkpIG9rID0gZmFsc2U7CiAgICAgICAgaWYgKGRpYWcxICE9IGRpYWcyKSBvayA9IGZhbHNlOwogICAgfQoKICAgIGNvdXQgPDwgKG9rID8gIlllcyIgOiAiTm8iKSA8PCAnXG4nOwoKICAgIHJldHVybiAwOwp9Cg==