Link to this code: https://cses.fi/paste/ac62df62589c625bdbb61a/
/* 777 */
#include <bits/stdc++.h>
using namespace std;

struct Node {
    int r, c, i;
    Node(int row = -1, int col = -1, int index = -1) : r(row), c(col), i(index) {};
};

// up, down, left, right
char dirp[4] = {'U', 'D', 'L', 'R'};
int dirr[4] = {-1, 1, 0, 0};
int dirc[4] = {0, 0, -1, 1};
const int MAX_N = 1005, D = 4;
int R, C, SR, SC, DR, DC, grid[MAX_N][MAX_N];
bool vis[MAX_N][MAX_N];
Node par[MAX_N][MAX_N];
queue<Node> q;  // Node.index = type (monster/human) only for queue

int multi_source_bfs(int sr = SR, int sc = SC) {
    q.push(Node(sr, sc, 1));
    vis[sr][sc] = 1;
    int lvl = 0;
    while (!q.empty()) {
        int n = q.size();
        while (n--) {
            Node x = q.front();
            int r = x.r, c = x.c, ty = x.i;
            if (ty && (r == 1 || r == R || c == 1 || c == C)) {
                DR = r;
                DC = c;
                return lvl;
            }
            q.pop();
            for (int i = 0; i < D; ++i) {
                int nr = r + dirr[i], nc = c + dirc[i];
                if (vis[nr][nc] || grid[nr][nc]) continue;
                vis[nr][nc] = 1;
                q.push(Node(nr, nc, ty));
                if (ty) par[nr][nc] = Node(r, c, i);
            }
        }
        lvl++;
    }
    return -1;
}

string get_path(int sr = SR, int sc = SC, int dr = DR, int dc = DC) {
    string path;
    for (int r = dr, c = dc; r != sr || c != sc;) {
        Node nxt = par[r][c];
        r = nxt.r;
        c = nxt.c;
        path.push_back(dirp[nxt.i]);
    }
    reverse(path.begin(), path.end());
    return path;
}

void solve() {
    cin >> R >> C;
    for (int r = 1; r <= R; ++r) {
        for (int c = 1; c <= C; ++c) {
            char x;
            cin >> x;
            grid[r][c] = x == '#';
            if (x == 'A') {
                SR = r;
                SC = c;
            } else if (x == 'M') {
                q.push(Node(r, c, 0));
                vis[r][c] = 1;
            }
        }
    }
    for (int r = 0; r <= R + 1; ++r) vis[r][0] = vis[r][C + 1] = 1;
    for (int c = 0; c <= C + 1; ++c) vis[0][c] = vis[R + 1][c] = 1;
    int len = multi_source_bfs();
    if (len < 0) {
        cout << "NO";
        return;
    }
    string path = get_path();
    cout << "YES\n" << (int) path.size() << '\n';
    cout << get_path();
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}