#include <bits/stdc++.h>
using namespace std;
const int N = 505, inf = 1e9;
const int dir[] = {1,0,-1,0,1};
int n, m;
int d[N][N];
char mat[N][N];
void solve() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
cin >> mat[i][j];
d[i][j] = inf;
}
d[n][m] = 0;
queue<array<int, 2>> Q;
Q.push({n, m});
while (Q.size()) {
auto [x, y] = Q.front(); Q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + dir[i], ny = y + dir[i+1];
if(nx >= 1 && nx <= n && ny >= 1 && ny <=m && d[nx][ny] == inf && mat[nx][ny] == '0') {
d[nx][ny] = d[x][y] + 1;
Q.push({nx, ny});
}
}
}
if (d[1][1] == inf) {
cout << -1 << "\n";
return;
}
int x = 1, y = 1;
string path;
while(x!=n||y!=m) {
if(x < n && d[x+1][y] == d[x][y] - 1) x++, path.push_back('D');
else if(y > 1 && d[x][y-1] == d[x][y] - 1) y--, path.push_back('L');
else if(y < m && d[x][y+1] == d[x][y] - 1) y++, path.push_back('R');
else if(x > 1 && d[x-1][y] == d[x][y] - 1) x--, path.push_back('U');
}
cout << path.size() << "\n";
cout << path << "\n";
}
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int T = 1;
while (T--) solve();
}
// 64 位输出请用 printf("%lld")