#include <bits/stdc++.h>
using namespace std;
bool isPerfectSquare(long long x) {
long long r = sqrt(x);
return r * r == x;
}
bool isPrime(long long x) {
if (x < 2) return false;
for (long long i = 2; i * i <= x; i++) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int N;
cin >> N;
vector<vector<int>> a(N, vector<int>(N));
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> a[i][j];
vector<long long> row(N, 0), col(N, 0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
row[i] += a[i][j];
col[j] += a[i][j];
}
}
// Tổng 2 đường chéo
long long diag1 = 0, diag2 = 0;
for (int i = 0; i < N; i++) {
diag1 += a[i][i];
diag2 += a[i][N - i - 1];
}
// Điều kiện 1
if (row[0] != row[N - 1] || !isPerfectSquare((row[0] + row[N - 1]) * 2)) {
cout << "No";
return 0;
}
// Điều kiện 2
if (col[0] == col[N - 1] || !isPrime(col[0] + col[N - 1])) {
cout << "No";
return 0;
}
if (N % 2 == 0) {
int mid = N / 2 - 1;
// Điều kiện 3 (N chẵn)
if (!isPerfectSquare(row[mid] * col[mid])) {
cout << "No";
return 0;
}
// Điều kiện đường chéo
if (diag1 == diag2) {
cout << "No";
return 0;
}
} else {
int mid = N / 2;
// Điều kiện 3 (N lẻ)
if (!isPrime(row[mid] + col[mid])) {
cout << "No";
return 0;
}
// Điều kiện đường chéo
if (diag1 != diag2) {
cout << "No";
return 0;
}
}
cout << "Yes";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGlzUGVyZmVjdFNxdWFyZShsb25nIGxvbmcgeCkgewogICAgbG9uZyBsb25nIHIgPSBzcXJ0KHgpOwogICAgcmV0dXJuIHIgKiByID09IHg7Cn0KCmJvb2wgaXNQcmltZShsb25nIGxvbmcgeCkgewogICAgaWYgKHggPCAyKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGxvbmcgbG9uZyBpID0gMjsgaSAqIGkgPD0geDsgaSsrKSB7CiAgICAgICAgaWYgKHggJSBpID09IDApIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBOOwogICAgY2luID4+IE47CgogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhKE4sIHZlY3RvcjxpbnQ+KE4pKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CgogICAgdmVjdG9yPGxvbmcgbG9uZz4gcm93KE4sIDApLCBjb2woTiwgMCk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykgewogICAgICAgICAgICByb3dbaV0gKz0gYVtpXVtqXTsKICAgICAgICAgICAgY29sW2pdICs9IGFbaV1bal07CiAgICAgICAgfQogICAgfQoKICAgIC8vIFThu5VuZyAyIMSRxrDhu51uZyBjaMOpbwogICAgbG9uZyBsb25nIGRpYWcxID0gMCwgZGlhZzIgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICBkaWFnMSArPSBhW2ldW2ldOwogICAgICAgIGRpYWcyICs9IGFbaV1bTiAtIGkgLSAxXTsKICAgIH0KCiAgICAvLyDEkGnhu4F1IGtp4buHbiAxCiAgICBpZiAocm93WzBdICE9IHJvd1tOIC0gMV0gfHwgIWlzUGVyZmVjdFNxdWFyZSgocm93WzBdICsgcm93W04gLSAxXSkgKiAyKSkgewogICAgICAgIGNvdXQgPDwgIk5vIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICAvLyDEkGnhu4F1IGtp4buHbiAyCiAgICBpZiAoY29sWzBdID09IGNvbFtOIC0gMV0gfHwgIWlzUHJpbWUoY29sWzBdICsgY29sW04gLSAxXSkpIHsKICAgICAgICBjb3V0IDw8ICJObyI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaWYgKE4gJSAyID09IDApIHsKICAgICAgICBpbnQgbWlkID0gTiAvIDIgLSAxOwoKICAgICAgICAvLyDEkGnhu4F1IGtp4buHbiAzIChOIGNo4bq1bikKICAgICAgICBpZiAoIWlzUGVyZmVjdFNxdWFyZShyb3dbbWlkXSAqIGNvbFttaWRdKSkgewogICAgICAgICAgICBjb3V0IDw8ICJObyI7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgICAgLy8gxJBp4buBdSBraeG7h24gxJHGsOG7nW5nIGNow6lvCiAgICAgICAgaWYgKGRpYWcxID09IGRpYWcyKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5vIjsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgIH0gZWxzZSB7CiAgICAgICAgaW50IG1pZCA9IE4gLyAyOwoKICAgICAgICAvLyDEkGnhu4F1IGtp4buHbiAzIChOIGzhurspCiAgICAgICAgaWYgKCFpc1ByaW1lKHJvd1ttaWRdICsgY29sW21pZF0pKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIk5vIjsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICAvLyDEkGnhu4F1IGtp4buHbiDEkcaw4budbmcgY2jDqW8KICAgICAgICBpZiAoZGlhZzEgIT0gZGlhZzIpIHsKICAgICAgICAgICAgY291dCA8PCAiTm8iOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCAiWWVzIjsKICAgIHJldHVybiAwOwp9Cg==