typedeflonglong llong; constint N = 305, M = N * N, B = 1e6; const llong INF = 0x3f3f3f3f3f3f3f3fll; #define con(typ) const typ & inlineintrin(int &r){ int b = 1, c = getchar(); r = 0; while ( c < '0' || '9' < c ) b = c == '-' ? -1 : b, c = getchar(); while ( '0' <= c && c <= '9' ) r = (r * 10) + (c ^ '0'), c = getchar(); return r *= b; } voidwrite(con(int) w){ if ( w < 0 ) putchar('-'), write(-w); elseif ( w < 10 ) putchar('0' + w); else write(w / 10), putchar('0' + w % 10); }
int n, m, nedg; int mtb[N][N]; llong mta[N][N], edga[N][N], edgb[N][N]; llong dis[N << 1];
boolrelax(con(int) u, con(llong) len, con(int) v){ if ( dis[v] > dis[u] + len ) { dis[v] = dis[u] + len; returntrue; } returnfalse; } boolbellmanFord(){ int cnt = 0; bool tag = false; for (int i = 1; i <= n + m; i++) dis[i] = 0; do { cnt++, tag = false; if ( cnt >= n + m ) returnfalse; for (int u = 1; u <= n + m; u++) if ( u <= n ) for (int v = 1; v <= m; v++) tag |= relax(u, edga[u][v], v + n); else for (int v = 1; v <= n; v++) tag |= relax(u, edgb[u - n][v], v); } while ( tag ); returntrue; } voidclean(){ nedg = 0; fill(dis, dis + n + m + 1, INF); } intmain(){ int ncas; rin(ncas); while ( ncas-- ) { rin(n), rin(m); clean(); for (int i = 1; i < n; i++) for (int j = 1; j < m; j++) rin(mtb[i][j]); for (int i = n; i; i--) for (int j = m; j; j--) if ( i == n || j == m ) mta[i][j] = 0; else mta[i][j] = mtb[i][j] - mta[i + 1][j + 1] - mta[i + 1][j] - mta[i][j + 1]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if ( (i & 1) ^ (j & 1) ) edga[i][j] = mta[i][j], edgb[j][i] = B - mta[i][j]; else edgb[j][i] = mta[i][j], edga[i][j] = B - mta[i][j]; if ( !bellmanFord() ) {printf("NO\n"); continue;} printf("YES\n"); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { llong now = mta[i][j]; if ( (i & 1) ^ (j & 1) ) now += dis[i] - dis[j + n]; else now += dis[j + n] - dis[i]; write((int)now), putchar(j == m ? '\n' : ' '); } } return0; }