#include<bits/stdc++.h>
using namespace std;
int t,n,m;
char a[2110][2110];
bool vis[2110][2110];
struct note{
int x,y;
string s;
};
queue<note> q;
int main(){
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
note k={1,1,""};
vis[1][1]=1;
q.push(k);
bool f=0;
while(!q.empty()){
note k=q.front();
q.pop();
if(k.x==n&&k.y==m){
cout<<k.s.size()<<endl;
cout<<k.s<<endl;
f=1;
break;
}
if(a[k.x-1][k.y]!=a[k.x][k.y]&&a[k.x-1][k.y])if(!vis[k.x-1][k.y]){vis[k.x-1][k.y]=1;q.push({k.x-1,k.y,k.s+'U'});}
if(a[k.x+1][k.y]!=a[k.x][k.y]&&a[k.x+1][k.y])if(!vis[k.x+1][k.y]){vis[k.x+1][k.y]=1;q.push({k.x+1,k.y,k.s+'D'});}
if(a[k.x][k.y-1]!=a[k.x][k.y]&&a[k.x][k.y-1])if(!vis[k.x][k.y-1]){vis[k.x][k.y-1]=1;q.push({k.x,k.y-1,k.s+'L'});}
if(a[k.x][k.y+1]!=a[k.x][k.y]&&a[k.x][k.y+1])if(!vis[k.x][k.y+1]){vis[k.x][k.y+1]=1;q.push({k.x,k.y+1,k.s+'R'});}
}
if(!f)cout<<-1<<endl;
queue<note> e;
swap(e,q);
}
return 0;
}