#include <bits/stdc++.h>
using namespace std;
long long t, n, m,
dx[4] = {-1, 1, 0, 0},
dy[4] = {0, 0, -1, 1};
char c[2010][2010], ans[2010][2010];
struct s{
long long x, y, z;
};
queue<s> q;
void print() {
string o;
for(long long i=n, j=m; !(i==1&&j==1); ) {
o += ans[i][j];
if(ans[i][j]=='U') i++;
if(ans[i][j]=='D') i--;
if(ans[i][j]=='L') j++;
if(ans[i][j]=='R') j--;
}
long long u = o.size();
for(int i=u-1; i>=0; i--) printf("%c", o[i]);
printf("\n");
}
void bfs() {
q.push((s){1, 1, 0});
while(!q.empty()) {
s f = q.front();
q.pop();
for(long long i=0; i<4; i++) {
long long ox = f.x + dx[i], oy = f.y + dy[i];
if(ox>=1 && ox<=n && oy>=1 && oy<=m && c[f.x][f.y]!=c[ox][oy] && ans[ox][oy]==char(0)) {
if(i==0) ans[ox][oy] = 'U';
if(i==1) ans[ox][oy] = 'D';
if(i==2) ans[ox][oy] = 'L';
if(i==3) ans[ox][oy] = 'R';
if(ox==n && oy==m) {
printf("%lld\n", f.z+1);
print();
return ;
}
q.push((s){ox, oy, f.z+1});
}
}
}
}
int main() {
scanf("%lld", &t);
while(t--) {
scanf("%lld%lld", &n, &m);
getchar();
for(long long i=1; i<=n; i++) {
for(long long j=1; j<=m; j++)
scanf("%c", &c[i][j]);
getchar();
}
bfs();
if(ans[n][m]==char(0)) printf("-1\n");
for(long long i=1; i<=n; i++)
for(long long j=1; j<=m; j++)
ans[i][j] = char(0);
}
return 0;
}
样例能过,但是 #1 TLE。