#ifdef NACHIA #define _GLIBCXX_DEBUG #else // disable assert #define NDEBUG #endif #include #include #include #include using namespace std; using ll = long long; const ll INF = 1ll << 60; #define REP(i,n) for(ll i=0; i using V = vector; template void chmax(A& l, const B& r){ if(l < r) l = r; } template void chmin(A& l, const B& r){ if(r < l) l = r; } void testcase(){ ll N; cin >> N; V> D(N, V(N)); REP(i,N) REP(j,N) cin >> D[i][j]; bool ok1 = 1, ok2 = 1, ok3 = 1, ok4 = 1; REP(i,N) REP(j,N) if(!((i == j && D[i][j] == 0) || (i != j && D[i][j] != 0))) ok1 = 0; REP(i,N) REP(j,N) if(D[i][j] != D[j][i]) ok2 = 0; REP(i,N) REP(j,N) REP(k,N) if(D[i][j] > D[i][k] + D[k][j]) ok3 = 0; REP(i,N) REP(j,N) REP(k,N) if(D[i][j] > max(D[i][k], D[k][j])) ok4 = 0; if(ok1 && ok2 && ok3) cout << "Yes\n"; else cout << "No\n"; if(ok1 && ok2 && ok4) cout << "Yes\n"; else cout << "No\n"; } int main(){ cin.tie(0)->sync_with_stdio(0); testcase(); return 0; }