#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
char dir[4] = {'L', 'R', 'U', 'D'};
const int N = 1e3 + 5;
int n, m;
string grid[N];
// dist[0][x][y] = khoảng cách ngắn nhất từ ô xuất phát ('A') đến ô (x, y)
// dist[1][x][y] = khoảng cách ngắn nhất từ một ô có quái vật ('M') đến ô (x, y)
vector<ii> s[2];
int dist[2][N][N];
int p[N][N];
bool ok(int x, int y) {
return (0 <= x && x < n && 0 <= y && y < m && grid[x][y] != '#');
}
void bfs(int id) {
memset(dist[id], -1, sizeof dist[id]);
queue<ii> q;
for (ii u : s[id]) {
int x = u.first, y = u.second;
dist[id][x][y] = 0;
q.push({x, y});
}
while (!q.empty()) {
ii u = q.front(); q.pop();
int x = u.first, y = u.second;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (!ok(nx, ny)) continue;
if (dist[id][nx][ny] == -1) {
dist[id][nx][ny] = dist[id][x][y] + 1;
if (id == 0) p[nx][ny] = i;
q.push({nx, ny});
}
}
}
}
// Có thể đến ô (x, y) mà không bị quái vật bắt hay không
bool canEscape(int x, int y) {
return (dist[0][x][y] != -1 && (dist[0][x][y] < dist[1][x][y] || dist[1][x][y] == -1));
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> grid[i];
for (int j = 0; j < m; j++) {
if (grid[i][j] == 'A') s[0].push_back({i, j});
if (grid[i][j] == 'M') s[1].push_back({i, j});
}
}
bfs(0);
bfs(1);
int tx = -1, ty = -1;
for (int x = 0; x < n; x++) {
if (canEscape(x, 0)) {tx = x; ty = 0;}
if (canEscape(x, m - 1)) {tx = x; ty = m - 1;}
}
for (int y = 0; y < m; y++) {
if (canEscape(0, y)) {tx = 0; ty = y;}
if (canEscape(n - 1, y)) {tx = n - 1; ty = y;}
}
if (tx == -1) {
cout << "NO" << '\n';
return 0;
}
cout << "YES" << '\n';
string path = "";
while (true) {
if (tx == s[0][0].first && ty == s[0][0].second) break;
int i = p[tx][ty];
path += dir[i];
tx -= dx[i], ty -= dy[i];
}
reverse(path.begin(), path.end());
cout << path.size() << '\n';
cout << path << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKaW50IGR4WzRdID0gezAsIDAsIC0xLCAxfTsgCmludCBkeVs0XSA9IHstMSwgMSwgMCwgMH07IApjaGFyIGRpcls0XSA9IHsnTCcsICdSJywgJ1UnLCAnRCd9OyAgCgpjb25zdCBpbnQgTiA9IDFlMyArIDU7IAoKaW50IG4sIG07IApzdHJpbmcgZ3JpZFtOXTsgCgovLyBkaXN0WzBdW3hdW3ldID0ga2hv4bqjbmcgY8OhY2ggbmfhuq9uIG5o4bqldCB04burIMO0IHh14bqldCBwaMOhdCAoJ0EnKSDEkeG6v24gw7QgKHgsIHkpCi8vIGRpc3RbMV1beF1beV0gPSBraG/huqNuZyBjw6FjaCBuZ+G6r24gbmjhuqV0IHThu6sgbeG7mXQgw7QgY8OzIHF1w6FpIHbhuq10ICgnTScpIMSR4bq/biDDtCAoeCwgeSkKdmVjdG9yPGlpPiBzWzJdOyAKaW50IGRpc3RbMl1bTl1bTl07IAppbnQgcFtOXVtOXTsgCgpib29sIG9rKGludCB4LCBpbnQgeSkgewoJcmV0dXJuICgwIDw9IHggJiYgeCA8IG4gJiYgMCA8PSB5ICYmIHkgPCBtICYmIGdyaWRbeF1beV0gIT0gJyMnKTsKfQoKdm9pZCBiZnMoaW50IGlkKSB7CgltZW1zZXQoZGlzdFtpZF0sIC0xLCBzaXplb2YgZGlzdFtpZF0pOyAgCgoJcXVldWU8aWk+IHE7ICAKCWZvciAoaWkgdSA6IHNbaWRdKSB7CgkJaW50IHggPSB1LmZpcnN0LCB5ID0gdS5zZWNvbmQ7IAoJCWRpc3RbaWRdW3hdW3ldID0gMDsgICAKCQlxLnB1c2goe3gsIHl9KTsgCgl9CgoJd2hpbGUgKCFxLmVtcHR5KCkpIHsKCQlpaSB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOyAKCQlpbnQgeCA9IHUuZmlyc3QsIHkgPSB1LnNlY29uZDsgCgoJCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CgkJCWludCBueCA9IHggKyBkeFtpXSwgbnkgPSB5ICsgZHlbaV07IAoJCQlpZiAoIW9rKG54LCBueSkpIGNvbnRpbnVlOyAKCQkJaWYgKGRpc3RbaWRdW254XVtueV0gPT0gLTEpIHsKCQkJCWRpc3RbaWRdW254XVtueV0gPSBkaXN0W2lkXVt4XVt5XSArIDE7ICAKCQkJCWlmIChpZCA9PSAwKSBwW254XVtueV0gPSBpOyAgCgkJCQlxLnB1c2goe254LCBueX0pOyAKCQkJfQoJCX0KCX0KfQoKLy8gQ8OzIHRo4buDIMSR4bq/biDDtCAoeCwgeSkgbcOgIGtow7RuZyBi4buLIHF1w6FpIHbhuq10IGLhuq90IGhheSBraMO0bmcKYm9vbCBjYW5Fc2NhcGUoaW50IHgsIGludCB5KSB7CglyZXR1cm4gKGRpc3RbMF1beF1beV0gIT0gLTEgJiYgKGRpc3RbMF1beF1beV0gPCBkaXN0WzFdW3hdW3ldIHx8IGRpc3RbMV1beF1beV0gPT0gLTEpKTsgIAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gbiA+PiBtOyAgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQljaW4gPj4gZ3JpZFtpXTsKCQlmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewoJCQlpZiAoZ3JpZFtpXVtqXSA9PSAnQScpIHNbMF0ucHVzaF9iYWNrKHtpLCBqfSk7ICAKCQkJaWYgKGdyaWRbaV1bal0gPT0gJ00nKSBzWzFdLnB1c2hfYmFjayh7aSwgan0pOyAKCQl9IAoJfQoKCWJmcygwKTsgCgliZnMoMSk7ICAKCglpbnQgdHggPSAtMSwgdHkgPSAtMTsgIAoJZm9yIChpbnQgeCA9IDA7IHggPCBuOyB4KyspIHsKCQlpZiAoY2FuRXNjYXBlKHgsIDApKSB7dHggPSB4OyB0eSA9IDA7fSAKCQlpZiAoY2FuRXNjYXBlKHgsIG0gLSAxKSkge3R4ID0geDsgdHkgPSBtIC0gMTt9Cgl9CgoJZm9yIChpbnQgeSA9IDA7IHkgPCBtOyB5KyspIHsKCQlpZiAoY2FuRXNjYXBlKDAsIHkpKSB7dHggPSAwOyB0eSA9IHk7fQoJCWlmIChjYW5Fc2NhcGUobiAtIDEsIHkpKSB7dHggPSBuIC0gMTsgdHkgPSB5O30KCX0KCglpZiAodHggPT0gLTEpIHsKCQljb3V0IDw8ICJOTyIgPDwgJ1xuJzsgCgkJcmV0dXJuIDA7IAoJfQoKCWNvdXQgPDwgIllFUyIgPDwgJ1xuJzsKCglzdHJpbmcgcGF0aCA9ICIiOyAgCgl3aGlsZSAodHJ1ZSkgewoJCWlmICh0eCA9PSBzWzBdWzBdLmZpcnN0ICYmIHR5ID09IHNbMF1bMF0uc2Vjb25kKSBicmVhazsgIAoJCWludCBpID0gcFt0eF1bdHldOyAgCgkJcGF0aCArPSBkaXJbaV07IAoJCXR4IC09IGR4W2ldLCB0eSAtPSBkeVtpXTsgCgl9ICAKCglyZXZlcnNlKHBhdGguYmVnaW4oKSwgcGF0aC5lbmQoKSk7IAoKCWNvdXQgPDwgcGF0aC5zaXplKCkgPDwgJ1xuJzsgICAKCWNvdXQgPDwgcGF0aCA8PCAnXG4nOyAKfQ==