## https://yukicoder.me/problems/no/3488 def check1(N, D): for i in range(N): if D[i][i] != 0: return False return True def check2(N, D): for i in range(N): for j in range(N): if D[i][j] != D[j][i]: return False return True def check3(N, D): 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 check4(N, D): 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 main(): N = int(input()) D = [] for _ in range(N): D.append(list(map(int, input().split()))) if check1(N, D) and check2(N, D) and check3(N,D): print("Yes") else: print("No") if check1(N, D) and check2(N, D) and check4(N,D): print("Yes") else: print("No") if __name__ == "__main__": main()