#include #include #include using std::cin; using std::cout; const char endl = '\n'; const int MAX = 1e6; void solve() { int n, m; cin >> n >> m; std::vector> a(n, std::vector(m, 0)), b(n - 1, std::vector(m - 1, 0)); std::vector>> g(n + m, std::vector>()); for (auto &i : b) { for (auto &x : i) { cin >> x; } } for (int i = n - 2; i >= 0; i--) { for (int j = m - 2; j >= 0; j--) { a[i][j] = b[i][j] - a[i + 1][j] - a[i + 1][j + 1] - a[i][j + 1]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if ((i + j) & 1) { g[i].emplace_back(j + n, a[i][j]); g[j + n].emplace_back(i, MAX - a[i][j]); } else { g[j + n].emplace_back(i, a[i][j]); g[i].emplace_back(j + n, MAX - a[i][j]); } } } std::vector dist(n + m); auto spfa = [&]() -> bool { std::queue q; std::vector vis(n + m, true); std::vector cnt(n + m); for (int i = 0; i < n + m; i++) { q.emplace(i); } while (!q.empty()) { int u = q.front(); q.pop(); vis[u] = false; for (auto e : g[u]) { int v = e.first, w = e.second; if (dist[v] > dist[u] + w) { dist[v] = dist[u] + w; if (!vis[v]) { if (++cnt[v] > n + m) return false; vis[v] = true; q.emplace(v); } } } } return true; }; if (!spfa()) { cout << "NO" << endl; return; } cout << "YES" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << a[i][j] + ((i + j) & 1 ? dist[i] - dist[j + n] : dist[j + n] - dist[i]) << ' '; } cout << endl; } } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); int t; cin >> t; while (t--) solve(); return 0; }