#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 5;
struct node{int r , c;}qin , qout;
int n , m;
char s[N][N];
int dx[4] = {1 , -1 , 0 , 0};
int dy[4] = {0 , 0 , 1 , -1};
int dp1[N][N] , dp2[N][N];
char pos[N][N];
int ra , ca;
queue<node> q1 , q2;
vector<char> ans;
int inside(int x , int y){
return 0 <= x && x < n && 0 <= y && y < m;
}
int ok = 0;
/// check if valid path exists
void dfs(int r , int c){
if(r == 0 || r == n - 1|| c == 0 || c == m - 1){
if(dp1[r][c] > dp2[r][c]){
cout << "YES" << endl;
ans.emplace_back(pos[r][c]);
ok = 1;
return;
}
}
for(int i = 0; i < 4; ++i){
int r2 = r + dx[i];
int c2 = c + dy[i];
if(inside(r2 , c2)){
if(pos[r2][c2] == '.'){
if(dp1[r2][c2] > dp2[r2][c2] && s[r2][c2] != '#'){
if(i == 0) pos[r2][c2] = 'D';
if(i == 1) pos[r2][c2] = 'U';
if(i == 2) pos[r2][c2] = 'R';
if(i == 3) pos[r2][c2] = 'L';
dfs(r2 , c2);
if(ok) {ans.emplace_back(pos[r][c]);break;}
}
}
}
}
}
void solve(){
/// min distance from a monster
while(q1.size()){
qout = q1.front();
q1.pop();
int r= qout.r , c = qout.c;
for(int i = 0; i < 4; ++i){
int r2 = qout.r + dx[i];
int c2 = qout.c + dy[i];
if(inside(r2 , c2)){
if(dp1[r2][c2] > dp1[r][c] + 1 && s[r2][c2] != '#'){
dp1[r2][c2] = dp1[r][c] + 1;
qin.r = r2 , qin.c = c2;
q1.push(qin);
}
}
}
}
qin.r = ra , qin.c = ca;
q2.push(qin);
/// min distance from A
while(!q2.empty()){
qout = q2.front();
q2.pop();
int r= qout.r , c = qout.c;
for(int i = 0; i < 4; ++i){
int r2 = qout.r + dx[i];
int c2 = qout.c + dy[i];
if(inside(r2 , c2)){
if(dp2[r2][c2] > dp2[r][c] + 1 && s[r2][c2] != '#'){
dp2[r2][c2] = dp2[r][c] + 1;
q2.push({r2 , c2});
}
}
}
}
dfs(ra , ca);
}
int main (){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n >> m;
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
cin >> s[i][j];
}
}
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
dp1[i][j] = dp2[i][j] = 1e9;
}
}
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
if(s[i][j] == 'M'){
q1.push({i , j});
dp1[i][j] = 0;
}
if(s[i][j] == 'A') {ra = i; ca = j; dp2[i][j] = 0;}
}
}
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
pos[i][j] = '.';
}
}
solve();
if(ans.empty()){ cout << "NO"; return 0;}
cout << ans.size() - 1<< endl;
reverse(ans.begin() , ans.end());
for(int i = 1; i < ans.size(); ++i) cout << ans[i];
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDFlMyArIDU7CnN0cnVjdCBub2Rle2ludCByICwgYzt9cWluICwgcW91dDsKaW50IG4gLCBtOwpjaGFyIHNbTl1bTl07CmludCBkeFs0XSA9IHsxICwgLTEgLCAwICwgMH07CmludCBkeVs0XSA9IHswICwgMCAsIDEgLCAtMX07CmludCBkcDFbTl1bTl0gLCBkcDJbTl1bTl07CmNoYXIgcG9zW05dW05dOwppbnQgcmEgLCBjYTsKcXVldWU8bm9kZT4gcTEgLCBxMjsKdmVjdG9yPGNoYXI+IGFuczsKaW50IGluc2lkZShpbnQgeCAsIGludCB5KXsKICAgIHJldHVybiAwIDw9IHggJiYgeCA8IG4gJiYgMCA8PSB5ICYmIHkgPCBtOwp9CmludCBvayA9IDA7Ci8vLyBjaGVjayBpZiB2YWxpZCBwYXRoIGV4aXN0cwp2b2lkIGRmcyhpbnQgciAsIGludCBjKXsKICAgIGlmKHIgPT0gMCB8fCByID09IG4gLSAxfHwgYyA9PSAwIHx8IGMgPT0gbSAtIDEpewogICAgICAgIGlmKGRwMVtyXVtjXSA+IGRwMltyXVtjXSl7CiAgICAgICAgICAgIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKICAgICAgICAgICAgYW5zLmVtcGxhY2VfYmFjayhwb3Nbcl1bY10pOwogICAgICAgICAgICBvayA9IDE7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKXsKICAgICAgICBpbnQgcjIgPSByICsgZHhbaV07CiAgICAgICAgaW50IGMyID0gYyArIGR5W2ldOwogICAgICAgIGlmKGluc2lkZShyMiAsIGMyKSl7CiAgICAgICAgICAgIGlmKHBvc1tyMl1bYzJdID09ICcuJyl7CiAgICAgICAgICAgICAgICBpZihkcDFbcjJdW2MyXSA+IGRwMltyMl1bYzJdICYmIHNbcjJdW2MyXSAhPSAnIycpewogICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gMCkgcG9zW3IyXVtjMl0gPSAnRCc7CiAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSAxKSBwb3NbcjJdW2MyXSA9ICdVJzsKICAgICAgICAgICAgICAgICAgICBpZihpID09IDIpIHBvc1tyMl1bYzJdID0gJ1InOwogICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gMykgcG9zW3IyXVtjMl0gPSAnTCc7CiAgICAgICAgICAgICAgICAgICAgZGZzKHIyICwgYzIpOwogICAgICAgICAgICAgICAgICAgIGlmKG9rKSB7YW5zLmVtcGxhY2VfYmFjayhwb3Nbcl1bY10pO2JyZWFrO30KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIHNvbHZlKCl7CiAgICAvLy8gbWluIGRpc3RhbmNlIGZyb20gYSBtb25zdGVyCiAgICB3aGlsZShxMS5zaXplKCkpewogICAgICAgIHFvdXQgPSBxMS5mcm9udCgpOwogICAgICAgIHExLnBvcCgpOwogICAgICAgIGludCByPSBxb3V0LnIgLCBjID0gcW91dC5jOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpewogICAgICAgICAgICBpbnQgcjIgPSBxb3V0LnIgKyBkeFtpXTsKICAgICAgICAgICAgaW50IGMyID0gcW91dC5jICsgZHlbaV07CiAgICAgICAgICAgIGlmKGluc2lkZShyMiAsIGMyKSl7CiAgICAgICAgICAgICAgICBpZihkcDFbcjJdW2MyXSA+IGRwMVtyXVtjXSArIDEgJiYgc1tyMl1bYzJdICE9ICcjJyl7CiAgICAgICAgICAgICAgICAgICAgZHAxW3IyXVtjMl0gPSBkcDFbcl1bY10gKyAxOwogICAgICAgICAgICAgICAgICAgIHFpbi5yID0gcjIgLCBxaW4uYyA9IGMyOwogICAgICAgICAgICAgICAgICAgIHExLnB1c2gocWluKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHFpbi5yID0gcmEgLCBxaW4uYyA9IGNhOwogICAgcTIucHVzaChxaW4pOwogICAgLy8vIG1pbiBkaXN0YW5jZSBmcm9tIEEKICAgIHdoaWxlKCFxMi5lbXB0eSgpKXsKICAgICAgICBxb3V0ID0gcTIuZnJvbnQoKTsKICAgICAgICBxMi5wb3AoKTsKICAgICAgICBpbnQgcj0gcW91dC5yICwgYyA9IHFvdXQuYzsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKXsKICAgICAgICAgICAgaW50IHIyID0gcW91dC5yICsgZHhbaV07CiAgICAgICAgICAgIGludCBjMiA9IHFvdXQuYyArIGR5W2ldOwogICAgICAgICAgICBpZihpbnNpZGUocjIgLCBjMikpewogICAgICAgICAgICAgICAgaWYoZHAyW3IyXVtjMl0gPiBkcDJbcl1bY10gKyAxICYmIHNbcjJdW2MyXSAhPSAnIycpewogICAgICAgICAgICAgICAgICAgIGRwMltyMl1bYzJdID0gZHAyW3JdW2NdICsgMTsKICAgICAgICAgICAgICAgICAgICBxMi5wdXNoKHtyMiAsIGMyfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBkZnMocmEgLCBjYSk7Cn0KaW50IG1haW4gKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgKytpKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbTsgKytqKXsKICAgICAgICAgICAgY2luID4+IHNbaV1bal07CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpID0gMDsgaSA8IG47ICsraSl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG07ICsrail7CiAgICAgICAgICAgIGRwMVtpXVtqXSA9IGRwMltpXVtqXSA9IDFlOTsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgKytpKXsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbTsgKytqKXsKICAgICAgICAgICAgaWYoc1tpXVtqXSA9PSAnTScpewogICAgICAgICAgICAgICAgcTEucHVzaCh7aSAsIGp9KTsKICAgICAgICAgICAgICAgIGRwMVtpXVtqXSA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoc1tpXVtqXSA9PSAnQScpIHtyYSA9IGk7IGNhID0gajsgZHAyW2ldW2pdID0gMDt9CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpID0gMDsgaSA8IG47ICsraSl7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IG07ICsrail7CiAgICAgICAgICAgIHBvc1tpXVtqXSA9ICcuJzsKICAgICAgICB9CiAgICB9CiAgICBzb2x2ZSgpOwogICAgaWYoYW5zLmVtcHR5KCkpeyBjb3V0IDw8ICJOTyI7IHJldHVybiAwO30KICAgIGNvdXQgPDwgYW5zLnNpemUoKSAtIDE8PCBlbmRsOwogICAgcmV2ZXJzZShhbnMuYmVnaW4oKSAsIGFucy5lbmQoKSk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgYW5zLnNpemUoKTsgKytpKSBjb3V0IDw8IGFuc1tpXTsKcmV0dXJuIDA7Cn0K