using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Security.Cryptography; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var d = NArr(n); var one = One(n, d); var two = Two(n, d); var three = Three(n, d); var four = Four(n, d); WriteLine(one && two && three ? "Yes" : "No"); WriteLine(one && two && four ? "Yes" : "No"); } static bool One(int n, int[][] d) { for (var i = 0; i < n; ++i) for (var j = 0; j < n; ++j) { if ((d[i][j] == 0) != (i == j)) return false; } return true; } static bool Two(int n, int[][] d) { for (var i = 0; i < n; ++i) for (var j = 0; j < n; ++j) { if (d[i][j] != d[j][i]) return false; } return true; } static bool Three(int n, int[][] d) { for (var i = 0; i < n; ++i) for (var j = 0; j < n; ++j) for (var k = 0; k < n; ++k) { if (d[i][j] > d[i][k] + d[k][j]) return false; } return true; } static bool Four(int n, int[][] d) { for (var i = 0; i < n; ++i) for (var j = 0; j < n; ++j) for (var k = 0; k < n; ++k) { if (d[i][j] > Math.Max(d[i][k], d[k][j])) return false; } return true; } }