#include <bits/stdc++.h>
using namespace std;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
char mai[4] = {'D', 'U', 'R', 'L'};
const int N = 3e3 + 10;
struct node {
int x;
int y;
int cnt;
};
node q[N * N];
bool vis[N][N];
char way[N][N];
int a[N][N];
int m, n;
int u, last;
void bfs() {
int head = 0, tail = 1;
q[head].x = q[head].y = 1;
vis[1][1] = 1;
while (head < tail) {
node now = q[head];
for (int i = 0; i < 4; i++) {
int xa = now.x + dx[i], ya = now.y + dy[i];
// if (xa < 1 || xa > n || ya < 1 || ya > n)
// continue;
if ( xa >= 1 && xa <= n && ya >= 1 && ya <= m && a[now.x][now.y] != a[xa][ya] && !vis[xa][ya]) {
way[xa][ya] = mai[i];
vis[xa][ya] = 1;
q[tail].x = xa;
q[tail].y = ya;
q[tail].cnt = q[head].cnt + 1;
if (xa == n && ya == m)
u = q[tail].cnt;
tail++;
}
}
head++;
}
}
void prt(int x, int y) {
if (x == 1 && y == 1)
return;
if (way[x][y] == 'R')
prt(x, y - 1);
if (way[x][y] == 'L')
prt(x, y + 1);
if (way[x][y] == 'U')
prt(x + 1, y);
if (way[x][y] == 'D')
prt(x - 1, y);
printf("%c", way[x][y]);
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> n >> m;
char c;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= m; j++) {
vis[i][j] = a[i][j] = 0;
}
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
cin >> c;
if (c == '1')
a[i][j] = 1;
}
bfs();
if (!vis[n][m]) {
cout << "-1" << endl;
} else {
cout << u << endl;
prt(n, m);
}
}
}