#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> G(n*n);
for (int i = 0; i < G.size(); i++)
{
cin >> G[i];
}
int j = 0, c = 0, s = 0;
/*с - счетчик циклов, сигнализирует о завершении текущего цикла сравнения
элементов i строки и j столбца; j - служит индексом для элементов столбца;
s - счетчик столбцов, служит для задания нового начального значения индексу
j при переходе к следующему циклу сравнения элементов i строки и j столбца;*/
bool f = true;
for (int i = 0; i < n*n; i++)//задаем цикл по всему массиву
{
if (G[i] != G[j]) { f=false; break; }
if (c == n - 1)
{
c = 0; s++; j = s;
}
/*если уже сравнили n-1 строку и столбец, обнуляем c, увеличиваем s
и присваиваем его как новое начальное значение для индекса элементов столбца j*/
else
{
j = j + n;//на каждом шаге устанавливаем индекс для элемента столбца
c++;
}
}
for (int i = 0; i < n*n; i = i + n + 1)
/*цикл для определения равенства нулю элементов главной диагонали - индекс
увеличивается на n+1 на каждом шаге*/
{
if (G[i] != 0) { f = false; break; }
}
if (f) cout << "YES";
else cout << "NO";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWFpbigpCnsKCWludCBuOyAKCWNpbiA+PiBuOwoJdmVjdG9yPGludD4gRyhuKm4pOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBHLnNpemUoKTsgaSsrKSAKCXsgCgkJY2luID4+IEdbaV07Cgl9CglpbnQgaiA9IDAsIGMgPSAwLCBzID0gMDsKCS8q0YEgLSDRgdGH0LXRgtGH0LjQuiDRhtC40LrQu9C+0LIsINGB0LjQs9C90LDQu9C40LfQuNGA0YPQtdGCINC+INC30LDQstC10YDRiNC10L3QuNC4INGC0LXQutGD0YnQtdCz0L4g0YbQuNC60LvQsCDRgdGA0LDQstC90LXQvdC40Y8gCgnRjdC70LXQvNC10L3RgtC+0LIgaSDRgdGC0YDQvtC60Lgg0LggaiDRgdGC0L7Qu9Cx0YbQsDsgaiAtINGB0LvRg9C20LjRgiDQuNC90LTQtdC60YHQvtC8INC00LvRjyDRjdC70LXQvNC10L3RgtC+0LIg0YHRgtC+0LvQsdGG0LA7CglzIC0g0YHRh9C10YLRh9C40Log0YHRgtC+0LvQsdGG0L7Qsiwg0YHQu9GD0LbQuNGCINC00LvRjyDQt9Cw0LTQsNC90LjRjyDQvdC+0LLQvtCz0L4g0L3QsNGH0LDQu9GM0L3QvtCz0L4g0LfQvdCw0YfQtdC90LjRjyDQuNC90LTQtdC60YHRgyAKCWog0L/RgNC4INC/0LXRgNC10YXQvtC00LUg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YbQuNC60LvRgyDRgdGA0LDQstC90LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQvtCyIGkg0YHRgtGA0L7QutC4INC4IGog0YHRgtC+0LvQsdGG0LA7Ki8KCWJvb2wgZiA9IHRydWU7CQkJCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBuKm47IGkrKykvL9C30LDQtNCw0LXQvCDRhtC40LrQuyDQv9C+INCy0YHQtdC80YMg0LzQsNGB0YHQuNCy0YMKCXsKCQlpZiAoR1tpXSAhPSBHW2pdKSB7IGY9ZmFsc2U7IGJyZWFrOyB9CgkJaWYgKGMgPT0gbiAtIDEpCQkJCQoJCXsJCQkJCQoJCQljID0gMDsgcysrOyBqID0gczsJCQoJCX0KCQkvKtC10YHQu9C4INGD0LbQtSDRgdGA0LDQstC90LjQu9C4IG4tMSDRgdGC0YDQvtC60YMg0Lgg0YHRgtC+0LvQsdC10YYsINC+0LHQvdGD0LvRj9C10LwgYywg0YPQstC10LvQuNGH0LjQstCw0LXQvCBzIAoJCdC4INC/0YDQuNGB0LLQsNC40LLQsNC10Lwg0LXQs9C+INC60LDQuiDQvdC+0LLQvtC1INC90LDRh9Cw0LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1INC00LvRjyDQuNC90LTQtdC60YHQsCDRjdC70LXQvNC10L3RgtC+0LIg0YHRgtC+0LvQsdGG0LAgaiovCgkJZWxzZQoJCXsKCQkJaiA9IGogKyBuOy8v0L3QsCDQutCw0LbQtNC+0Lwg0YjQsNCz0LUg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0LjQvdC00LXQutGBINC00LvRjyDRjdC70LXQvNC10L3RgtCwINGB0YLQvtC70LHRhtCwCgkJCWMrKzsJCQkJCgkJfQoJfQoJZm9yIChpbnQgaSA9IDA7IGkgPCBuKm47IGkgPSBpICsgbiArIDEpCgkvKtGG0LjQutC7INC00LvRjyDQvtC/0YDQtdC00LXQu9C10L3QuNGPINGA0LDQstC10L3RgdGC0LLQsCDQvdGD0LvRjiDRjdC70LXQvNC10L3RgtC+0LIg0LPQu9Cw0LLQvdC+0Lkg0LTQuNCw0LPQvtC90LDQu9C4IC0g0LjQvdC00LXQutGBIAoJ0YPQstC10LvQuNGH0LjQstCw0LXRgtGB0Y8g0L3QsCBuKzEg0L3QsCDQutCw0LbQtNC+0Lwg0YjQsNCz0LUqLwoJewkJCQkJCgkJaWYgKEdbaV0gIT0gMCkgeyBmID0gZmFsc2U7IGJyZWFrOyB9CQoJfQoJaWYgKGYpIGNvdXQgPDwgIllFUyI7CgllbHNlIGNvdXQgPDwgIk5PIjsKCXJldHVybiAwOwp9