use std::collections::HashMap; use proconio::{fastout, input}; #[fastout] fn main() { input! { t: usize } for _ in 0..t { let ans = solve(); println!("{}", if ans { "finite" } else { "infinite" }); } } fn solve() -> bool { input! { h: usize, w: usize, a: [[i64; w]; h], } let inf = 1i64 << 60; let check = |f: fn(usize, usize) -> usize| { let mut max = HashMap::new(); for i in 0..h { for j in 0..w { let m = max.entry(f(i, j)).or_insert(-inf); if *m + a[i][j] > 0 { return true; } *m = (*m).max(a[i][j]); } } false }; if check(|i, _j| i) { return false; } if check(|_i, j| j) { return false; } if check(|i, j| i + j) { return false; } if check(|i, j| i.wrapping_sub(j)) { return false; } true }