#include <bits/stdc++.h>   using namespace std;   const int maxn = (int)1e6 + 10;   const int mod = (int)1e9 + 7;   const int inf = (1 << 30) - 1;   int n, m, q;   int a[maxn];   int good[maxn];   vector<int> g[maxn];   int p[maxn];   int dx[] = {-1, 1, 0, 0};   int dy[] = {0, 0, -1, 1};   char dir[] = { U ,  D ,  L ,  R };   int u[maxn];   int T;   int b[maxn];   char c[maxn];   bool dfs(int v) {     if (u[v] == T) return false;     u[v] = T;     for (int to : g[v]) {       if (p[to] == -1) {         p[to] = v;         p[v] = to;         return true;       }     }     for (int to : g[v]) {       if (good[p[to]] > 0) {         p[p[to]] = -1;         p[to] = v;         p[v] = to;         return true;       }     }     for (int to : g[v]) {       if (dfs(p[to])) {         p[to] = v;         p[v] = to;         return true;       }     }     return false;   }   void solve() {     cin >> n >> m;     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cin >> a[i * m + j];         good[i * m + j] = 0;         g[i * m + j].clear();         p[i * m + j] = -1;         u[i * m + j] = 0;       }     }     T = 0;     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         for (int k = 0; k < 4; k++) {           int x = i + dx[k];           int y = j + dy[k];           if (x >= 0 && x < n && y >= 0 && y < m) {             if (a[i * m + j] > a[x * m + y]) {               good[i * m + j] = 1;             } else if (a[i * m + j] == a[x * m + y]) {               g[i * m + j].emplace_back(x * m + y);             }           }         }       }     }     vector<int> li;     for (int i = 0; i < n * m; i++) {       if (good[i] == 0) {         li.emplace_back(i);       }     }     while (true) {       int ok = false;       T++;       for (int i = 0; i < li.size(); i++) {         if (p[li[i]] == -1 && dfs(li[i])) {           ok = true;         }       }       if (!ok) break;     }     for (int i = 0; i < n * m; i++) {       if (good[i]) continue;       if (p[i] == -1) {         cout <<  NO n ;         return;       }     }     cout <<  YES n ;     for (int i = 0; i < n * m; i++) {       if (p[i] == -1) {         for (int k = 0; k < 4; k++) {           int x = i / m + dx[k];           int y = i % m + dy[k];           if (x >= 0 && x < n && y >= 0 && y < m) {             if (a[i] > a[x * m + y]) {               b[i] = a[i] - a[x * m + y];               c[i] = dir[k];             }           }         }       } else {         for (int k = 0; k < 4; k++) {           int x = i / m + dx[k];           int y = i % m + dy[k];           if (x >= 0 && x < n && y >= 0 && y < m) {             if (a[i] == a[x * m + y] && p[i] == x * m + y) {               if (i < x * m + y) {                 b[i] = 1;               } else {                 b[i] = a[i] - 1;               }               c[i] = dir[k];             }           }         }       }     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cout << b[i * m + j] <<    ;       }       cout <<   n ;     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         cout << c[i * m + j] <<    ;       }       cout <<   n ;     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie();     cout.tie();     int t = 1;     cin >> t;     for (int i = 1; i <= t; i++) {       solve();     }     return 0;   }