Link to this code: https://cses.fi/paste/ab08a56af0e69f8fc3af78/
# include <bits/stdc++.h>
using namespace std;
// # define int long long
# define print_grid(grid) for (auto &x: grid) {for (auto &y: x) cout << y << " "; cout << endl;}

const int INF = 1e9;
int dirr[4] = {-1, 0, 1, 0};
int dirc[4] = {0, 1, 0, -1};
char dirMap[4] = {'U', 'R', 'D', 'L'};

int R, C, dr, dc;
int grid[1010][1010], vis[1010][1010];
// vector<vector<int>> grid, vis;
pair<int, int> par[1010][1010];

bool notValid(int r, int c) {
    return r < 0 || c < 0 || r == R || c == C || vis[r][c] || grid[r][c];
}

int bfs(int sr, int sc) {
    int res = 0;
    queue<pair<int, pair<int, int>>> q;
    vis[sr][sc] = 1;
    q.push({0, {sr, sc}});
    while (!q.empty()) {
        auto [cur, cell] = q.front();
        auto [r, c] = cell;
        q.pop();
        if (r == dr && c == dc) {
            return cur;
        }
        for (int i = 0 ; i < 4 ; ++i) {
            int nr = r + dirr[i], nc = c + dirc[i];
            // cout << r << " " << c << " " << nr << " " << nc << endl;
            if(notValid(nr, nc)) continue;
            vis[nr][nc] = 1;
            q.push({cur + 1, {nr, nc}});
            par[nr][nc] = {r, c};
        }
    }
    return INF;
}

void solve() {
    memset(grid, 0, sizeof(grid));
    memset(vis, 0, sizeof(vis));
    int sr, sc;
    char x;
    cin >> R >> C;
    // grid.resize(R + 1, vector(C + 1, 0));
    // vis.resize(R + 1, vector(C + 1, 0));
    for (int r = 0 ; r < R ; ++r) {
        for (int c = 0 ; c < C ; ++c) {
            cin >> x;
            if (x == 'A') { sr = r; sc = c; }
            else if (x == 'B') { dr = r; dc = c; }
            else grid[r][c] = x == '#';
        }
    }
    int ans = bfs(sr, sc);
    if (ans == INF) {
        cout << "NO" << "\n";
        return;
    }
    string path;
    for (int r = dr, c = dc ;make_pair(r, c) != make_pair(sr, sc);) {
        auto [nr, nc] = par[r][c];
        for (int i = 0 ; i < 4 ; ++i) {
            if (r == (nr + dirr[i]) && c == (nc + dirc[i])) {
                path.push_back(dirMap[i]);
            }
        }
        r = nr;c = nc;
    }
    reverse(path.begin(), path.end());
    cout << "YES" << "\n" << ans << "\n" << path << "\n";
}

signed main() {
    solve();
    return 0;
}