N = int(input()) D = [[int(s) for s in input().split()] for _ in range(N)] def is_non_degenerate(): for i in range(N): for j in range(N): if (i == j) != (D[i][j] == 0): return False return True def is_symmetry(): for i in range(N): for j in range(N): if D[i][j] != D[j][i]: return False return True def satisfy_triangle_inequality(): for i in range(N): for j in range(N): for k in range(N): if D[i][j] > D[i][k] + D[k][j]: return False return True def satisfy_strong_triangle_inequality(): for i in range(N): for j in range(N): for k in range(N): if D[i][j] > max(D[i][k], D[k][j]): return False return True def is_good(): return is_non_degenerate() and is_symmetry() and satisfy_triangle_inequality() def is_very_good(): return ( is_non_degenerate() and is_symmetry() and satisfy_strong_triangle_inequality() ) print("Yes" if is_good() else "No") print("Yes" if is_very_good() else "No")