#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 static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); bool R(int x1, int y1, int x2, int y2) { if (x1 == x2 || y1 == y2) return true; if (x1 - y1 == x2 - y2) return true; if (x1 + y1 == x2 + y2) return true; return false; } bool Solve() { var h = I(); var w = I(); var az = new int[h, w]; for (var i = 0; i < h; i++) for (var j = 0; j < w; j++) az[i, j] = I(); for (var i = 0; i < h; i++) for (var j = 0; j < w; j++) { var a1 = az[i, j]; for (var x = 0; x < h; x++) for (var y = 0; y < w; y++) { if ((i, j) == (x, y)) continue; if (!R(i, j, x, y)) continue; var a2 = az[x, y]; if (a1 + a2 > 0) return false; } } return true; } var t = I(); var ans = Range(t, () => Solve() ? "finite" : "infinite"); Console.WriteLine(string.Join(Environment.NewLine, ans));