#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion var n = I(); var d = new int[n, n]; for (var i = 0; i < n; i++) for (var j = 0; j < n; j++) d[i, j] = I(); string[] Solve() { string[] nono = ["No", "No"]; string[] res = ["Yes", "Yes"]; for (var i = 0; i < n; i++) for (var j = 0; j <= i; j++) { if (d[i, j] != d[j, i]) return nono; if ((i == j) ^ (d[i, j] == 0)) return nono; } 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]) res[0] = "No"; if (d[i, j] > Math.Max(d[i, k], d[k, j])) res[1] = "No"; } } return res; } var ans = Solve(); Console.WriteLine(string.Join(Environment.NewLine, ans));