// 条件3チェック忘れ #include using namespace std; int main() { int N; cin >> N; constexpr const int bound = 10; int D[bound][bound]; for( int i = 0 ; i < N ; i++ ){ for( int j = 0 ; j < N ; j++ ){ cin >> D[i][j]; } } bool ultrametric = true; for( int i = 0 ; i < N ; i++ ){ for( int j = 0 ; j < N ; j++ ){ if( ( D[i][j] == 0 ) != ( i == j ) ){ cout << "No\nNo\n"; return 0; } if( D[i][j] != D[j][i] ){ cout << "No\nNo\n"; return 0; } for( int k = 0 ; k < N ; k++ ){ if( ultrametric ){ if( D[i][k] > max( D[i][j] , D[j][k] ) ){ ultrametric = false; } } // if( ! ultrametric ){ // if( D[i][k] > D[i][j] + D[j][k] ){ // cout << "No\nNo\n"; // return 0; // } // } } } } cout << "Yes\n" << ( ultrametric ? "Yes\n" : "No\n" ); return 0; }