#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int T,M,N,delta[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
long long map[2024][2024],trace[2024][2024],step[2024][2024];
int main()
{
ios::sync_with_stdio(0);
cin>>T;
for(;T;T--)
{
cin>>N>>M;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
cin>>map[i][j];
trace[i][j]=-1;
step[i][j]=0;
}
}
queue<pair<pair<int,int>,int>> target;
target.push({{1,1},0});
trace[1][1]=1;
while(!target.empty())
{
pair<pair<int,int>,int> temp=target.front();
target.pop();
for(int i=0;i<4;i++)
{
int x=temp.first.first,y=temp.first.second,dx=delta[i][0],dy=delta[i][1],status=map[x][y];
step[x][y]=temp.second;
if(1<=x+dx && x+dx<=N && 1<=y+dy && y+dy<=M && map[x+dx][y+dy]!=status && trace[x+dx][y+dy]==-1)
{
target.push({{x+dx,y+dy},i+1});
trace[x+dx][y+dy]=trace[x][y]+1;
}
}
}
if(trace[N][M]==-1)
{
cout<<-1<<endl;
}
else
{
cout<<trace[N][M]-1<<endl;
string ans;
while(M!=1 || N!=1)
{
char s='\0';
switch(step[N][M])
{
case 1:s='D';break;
case 2:s='R';break;
case 3:s='U';break;
case 4:s='L';break;
}
int dx=delta[step[N][M]-1][0],dy=delta[step[N][M]-1][1];
N-=dx;
M-=dy;
ans+=s;
}
for(int i=ans.size()-1;i>=0;i--)
{
cout<<ans[i];
}
cout<<endl;
}
}
return 0;
}