#include <bits/stdc++.h>   using namespace std;   inline void read(int &x) {     char c;     int f = 1;     while (!isdigit(c = getchar()))       if (c ==  - ) f = -1;     x = (c & 15);     while (isdigit(c = getchar())) x = (x << 1) + (x << 3) + (c & 15);     x *= f;   }   const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, -1, 0, 1};   int _, n, m, i, j, k, a[100005], dis[100015], s = 0, t = 100001, ss = 100002,                                                 tt = 100003, l[100015];   int dir[100005], res[100005];   int px[2000005], py[2000005], pdx[2000005], pdy[2000005];   int id(int x, int y) { return (x - 1) * m + y; }   vector<int> bi[100015];   struct ii {     int y, z;   } e[2000005];   int tot;   void init() {     int i;     for ((i) = 1; (i) <= (tot); (i)++) px[i] = py[i] = pdx[i] = pdy[i] = 0;     tot = 0;     memset(l, 0, sizeof(l));     for ((i) = 0; (i) <= (tt); (i)++) bi[i].clear();   }   void add(int x, int y, int z) {     tot++;     bi[x].push_back(tot + tot - 2);     bi[y].push_back(tot + tot - 1);     e[tot + tot - 2] = (ii){y, z};     e[tot + tot - 1] = (ii){x, 0};   }   bool bfs(int s, int t) {     memset(dis, 0x3f, sizeof(dis));     dis[s] = 0;     queue<int> qx;     qx.push(s);     while (!qx.empty()) {       int x = qx.front();       qx.pop();       for (__typeof((bi[x]).begin()) it = (bi[x]).begin(); it != (bi[x]).end();            ++it)         if (e[*it].z && dis[e[*it].y] > dis[x] + 1) {           dis[e[*it].y] = dis[x] + 1;           qx.push(e[*it].y);         }     }     return dis[t] < dis[100014];   }   int dfs(int x, int tt, int flw) {     if (x == tt || !flw) return flw;     int ans = 0;     for (__typeof((bi[x]).begin()) it = (bi[x]).begin(); it != (bi[x]).end();          ++it)       if (dis[x] + 1 == dis[e[*it].y] && e[*it].z) {         int t = dfs(e[*it].y, tt, min(flw, e[*it].z));         ans += t;         flw -= t;         e[*it].z -= t;         e[(*it) ^ 1].z += t;       }     if (flw) dis[x] = -1;     return ans;   }   int dinic(int s, int t) {     int ans = 0;     while (bfs(s, t)) {       ans += dfs(s, t, 0x3f3f3f3f);     }     return ans;   }   int main() {     read(_);     while (_--) {       read(n);       read(m);       for ((i) = 1; (i) <= (n); (i)++)         for ((j) = 1; (j) <= (m); (j)++) read(a[id(i, j)]);       init();       add(t, s, 0x3f3f3f3f);       for ((i) = 1; (i) <= (n * m); (i)++) {         dir[i] = res[i] = 0;       }       for ((i) = 1; (i) <= (n); (i)++)         for ((j) = 1; (j) <= (m); (j)++) {           bool f = 0;           for ((k) = 0; (k) < (4); (k)++) {             int x = i + dx[k], y = j + dy[k];             if (x < 1 || x > n || y < 1 || y > m) continue;             if (a[id(i, j)] == a[id(x, y)] && ((i + j) & 1)) {               add(id(i, j), id(x, y), 1);               px[tot] = id(i, j);               py[tot] = id(x, y);               pdx[tot] = k;               pdy[tot] = (k ^ 2);             }             if (a[id(i, j)] > a[id(x, y)]) {               dir[id(i, j)] = k;               res[id(i, j)] = a[id(i, j)] - a[id(x, y)];               f = 1;             }           }           if ((i + j) & 1) {             if (!f) {               l[s]--;               l[id(i, j)]++;             } else               add(s, id(i, j), 1);           } else {             if (!f) {               l[id(i, j)]--;               l[t]++;             } else               add(id(i, j), t, 1);           }         }       int sum = 0, ctot = tot;       for ((i) = 0; (i) <= (t); (i)++) {         if (l[i] > 0) {           add(ss, i, l[i]);           sum += l[i];         }         if (l[i] < 0) {           add(i, tt, -l[i]);         }       }       int ans = dinic(ss, tt);       if (ans != sum) {         puts( NO );         continue;       }       puts( YES );       for ((i) = (2); (i) <= (ctot); (i)++)         if (e[i + i - 1].z) {           dir[px[i]] = pdx[i];           dir[py[i]] = pdy[i];           res[px[i]] = 1;           res[py[i]] = a[py[i]] - 1;         }       for ((i) = 1; (i) <= (n); (i)++) {         for ((j) = 1; (j) <= (m); (j)++) {           printf( %d%c , res[id(i, j)], (j == m ?   n  :    ));         }       }       for ((i) = 1; (i) <= (n); (i)++) {         for ((j) = 1; (j) <= (m); (j)++) {           printf( %c%c , dir[id(i, j)][ ULDR ], (j == m ?   n  :    ));         }       }     }     return 0;   }