#include <iostream>
#include <vector>
using namespace std;
int ** a; // Матрица смежности будет записана именно сюда.
int n = 51; // Число вершин.
int* was;// Массив цвета вершины.
bool dfs(int key){
//"Красим" вершину в серый цвет (указываем, что мы в нее вошли).
was[key] = 1;
//Проходим все связанные с текущей вершиной.
for(int i = 0; i < n; i++){
//Если значение элемента строки матрицы (по условию, нам дана матрица смежности) отлично от "0", то:
if(a[key][i]){
//если вершина "белая" (т. е. мы в неё еще не заходили)-
//запускаем рекурсивный вызов DFS от этой вершины.
if(was[i] == 0){if(dfs(i)) return true;}
//если вершина "серая" (мы её уже навещали, но не возвращались из ее потомков)-
//мы нашли цикл, следовательно поиск можно завершить.
else if(was[i] == 1){ return true;}
}
}
//Если ни один из if - ов не сработал, то "красим" вершину в черный цвет (отмечаем, как пройденную)
was[key] = 2;
//и возвращаем результат поиска (мы ничего не нашли).
return false;
}
int main() {
cin >> n;
a = new int *[n];
was = new int [n];
for(int i = 0; i < n; i++){
a[i] = new int [n];
was[i] = 0;
for(int j = 0; j < n; j++){
cin >> a[i][j];
}
}
for(int i = 0; i < n; i++){
//Проверяем поиском каждую вершину. Если поиск оказался успешным - выводим "1".
//Проверка цвета сделана ради ускорения процесса, иначе в поиске пришлось бы проходить весь
//цикл, даже если вершина покрашена в черный цвет.
if(!was[i]&&dfs(i)) {cout << "1\n"; return 0;}
}
//Если if ни разу не сработал - выводим "0".
cout << "0\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmludCAqKiBhOyAvLyDQnNCw0YLRgNC40YbQsCDRgdC80LXQttC90L7RgdGC0Lgg0LHRg9C00LXRgiDQt9Cw0L/QuNGB0LDQvdCwINC40LzQtdC90L3QviDRgdGO0LTQsC4KaW50IG4gPSA1MTsgLy8g0KfQuNGB0LvQviDQstC10YDRiNC40L0uIAppbnQqIHdhczsvLyDQnNCw0YHRgdC40LIg0YbQstC10YLQsCDQstC10YDRiNC40L3Riy4KIApib29sIGRmcyhpbnQga2V5KXsKICAvLyLQmtGA0LDRgdC40LwiINCy0LXRgNGI0LjQvdGDINCyINGB0LXRgNGL0Lkg0YbQstC10YIgKNGD0LrQsNC30YvQstCw0LXQvCwg0YfRgtC+INC80Ysg0LIg0L3QtdC1INCy0L7RiNC70LgpLgogIHdhc1trZXldID0gMTsKICAvL9Cf0YDQvtGF0L7QtNC40Lwg0LLRgdC1INGB0LLRj9C30LDQvdC90YvQtSDRgSDRgtC10LrRg9GJ0LXQuSDQstC10YDRiNC40L3QvtC5LgogIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogIC8v0JXRgdC70Lgg0LfQvdCw0YfQtdC90LjQtSDRjdC70LXQvNC10L3RgtCwINGB0YLRgNC+0LrQuCDQvNCw0YLRgNC40YbRiyAo0L/QviDRg9GB0LvQvtCy0LjRjiwg0L3QsNC8INC00LDQvdCwINC80LDRgtGA0LjRhtCwINGB0LzQtdC20L3QvtGB0YLQuCkg0L7RgtC70LjRh9C90L4g0L7RgiAiMCIsINGC0L46CiAgICAgIGlmKGFba2V5XVtpXSl7CiAgICAgICAgICAvL9C10YHQu9C4INCy0LXRgNGI0LjQvdCwICLQsdC10LvQsNGPIiAo0YIuINC1LiDQvNGLINCyINC90LXRkSDQtdGJ0LUg0L3QtSDQt9Cw0YXQvtC00LjQu9C4KS0gCiAgICAgICAgICAvL9C30LDQv9GD0YHQutCw0LXQvCDRgNC10LrRg9GA0YHQuNCy0L3Ri9C5INCy0YvQt9C+0LIgREZTINC+0YIg0Y3RgtC+0Lkg0LLQtdGA0YjQuNC90YsuCiAgICAgICAgICBpZih3YXNbaV0gPT0gMCl7aWYoZGZzKGkpKSByZXR1cm4gdHJ1ZTt9CiAgICAgICAgICAvL9C10YHQu9C4INCy0LXRgNGI0LjQvdCwICLRgdC10YDQsNGPIiAo0LzRiyDQtdGRINGD0LbQtSDQvdCw0LLQtdGJ0LDQu9C4LCDQvdC+INC90LUg0LLQvtC30LLRgNCw0YnQsNC70LjRgdGMINC40Lcg0LXQtSDQv9C+0YLQvtC80LrQvtCyKS0gIAogICAgICAgICAgLy/QvNGLINC90LDRiNC70Lgg0YbQuNC60LssINGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+INC/0L7QuNGB0Log0LzQvtC20L3QviDQt9Cw0LLQtdGA0YjQuNGC0YwuCiAgICAgICAgICBlbHNlIGlmKHdhc1tpXSA9PSAxKXsgcmV0dXJuIHRydWU7fQogICAgICB9CiAgfQogIC8v0JXRgdC70Lgg0L3QuCDQvtC00LjQvSDQuNC3IGlmIC0g0L7QsiDQvdC1INGB0YDQsNCx0L7RgtCw0LssINGC0L4gItC60YDQsNGB0LjQvCIg0LLQtdGA0YjQuNC90YMg0LIg0YfQtdGA0L3Ri9C5INGG0LLQtdGCICjQvtGC0LzQtdGH0LDQtdC8LCDQutCw0Log0L/RgNC+0LnQtNC10L3QvdGD0Y4pCiAgd2FzW2tleV0gPSAyOwogLy/QuCDQstC+0LfQstGA0LDRidCw0LXQvCDRgNC10LfRg9C70YzRgtCw0YIg0L/QvtC40YHQutCwICjQvNGLINC90LjRh9C10LPQviDQvdC1INC90LDRiNC70LgpLgogIHJldHVybiBmYWxzZTsKfQppbnQgbWFpbigpIHsKICBjaW4gPj4gbjsKICBhID0gbmV3IGludCAqW25dOwogIHdhcyA9IG5ldyBpbnQgW25dOwogIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICBhW2ldID0gbmV3IGludCBbbl07CiAgICAgIHdhc1tpXSA9IDA7CiAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBuOyBqKyspewogICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgIH0KICB9CiAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CiAgICAgIC8v0J/RgNC+0LLQtdGA0Y/QtdC8INC/0L7QuNGB0LrQvtC8INC60LDQttC00YPRjiDQstC10YDRiNC40L3Rgy4g0JXRgdC70Lgg0L/QvtC40YHQuiDQvtC60LDQt9Cw0LvRgdGPINGD0YHQv9C10YjQvdGL0LwgLSDQstGL0LLQvtC00LjQvCAiMSIuIAogICAgICAvL9Cf0YDQvtCy0LXRgNC60LAg0YbQstC10YLQsCDRgdC00LXQu9Cw0L3QsCDRgNCw0LTQuCDRg9GB0LrQvtGA0LXQvdC40Y8g0L/RgNC+0YbQtdGB0YHQsCwg0LjQvdCw0YfQtSDQsiDQv9C+0LjRgdC60LUg0L/RgNC40YjQu9C+0YHRjCDQsdGLINC/0YDQvtGF0L7QtNC40YLRjCDQstC10YHRjCAKICAgICAgLy/RhtC40LrQuywg0LTQsNC20LUg0LXRgdC70Lgg0LLQtdGA0YjQuNC90LAg0L/QvtC60YDQsNGI0LXQvdCwINCyINGH0LXRgNC90YvQuSDRhtCy0LXRgi4KICAgICAgaWYoIXdhc1tpXSYmZGZzKGkpKSB7Y291dCA8PCAiMVxuIjsgcmV0dXJuIDA7fQogIH0KICAvL9CV0YHQu9C4IGlmINC90Lgg0YDQsNC30YMg0L3QtSDRgdGA0LDQsdC+0YLQsNC7IC0g0LLRi9Cy0L7QtNC40LwgIjAiLgogIGNvdXQgPDwgIjBcbiI7CiAgcmV0dXJuIDA7Cn0=