Link to this code: https://cses.fi/paste/9835aecc6fe574344034b6/
/* Author : Rankit */
/* IIIT Allahbad */
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
#define fast                     \
    ios::sync_with_stdio(false); \
    cin.tie(NULL);               \
    cout.tie(NULL);
#define ff first
#define ss second
#define int long long
#define ll long long
#define fr(i, k, n) for (ll i = k; i < n; i++)
#define fl(i, n, k) for (ll i = n; i >= k; i--)
#define rep(i, n) for (ll i = 0; i < n; i++)
#define pb push_back
#define mp make_pair
#define nn "\n"
#define yes "YES"
#define no "NO"
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define INF 1000000000000000003
#define PI 3.141592653589793238462
#define setbits(x) __builtin_popcount(x)
#define sz(x) x.size()
#define emp(x) x.empty()

typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
typedef map<int, int> mii;
typedef map<ll, ll> mll;
typedef unsigned long long ull;
typedef long double lld;

class Node
{
public:
    int fi;
    int se;
    string path;
};

const int di[4]={1,0,-1,0},dj[4]={0,1,0,-1};
const char dc[4]={'D','R','U','L'} ;
const int N = 1e3+5;
char A[N][N];
string ans;

bool bfs(int i, int j, string s, int n, int m)
{
    queue<Node> q;
    q.push({i, j, ""});
    A[i][j] = '#';
    while (!q.empty())
    {
        int sz = q.size();
        while (sz--)
        {
            auto v = q.front();
            q.pop();
            for (int k = 0; k < 4; k++)
            {
                int x = v.fi + di[k];
                int y = v.se + dj[k];

                if (x < 0 || x > n - 1 || y < 0 || y > m - 1 || A[x][y] == '#')
                    continue;
                string temp = v.path;
                char ch = dc[k];
                temp.push_back(ch);
                if (A[x][y] == 'B')
                {
                    ans = temp;
                    A[x][y] = '#';
                    return true;
                }
                A[x][y] = '#';
                q.push({x, y, temp});
            }
        }
    }
    return false;
}

void solve()
{
    int n, m;
    cin >> n >> m;
   
    rep(i, n)
    {
        rep(j, m)
        {
            cin >> A[i][j];
        }
    }
    rep(i, n)
    {
        rep(j, m)
        {
            if (A[i][j] == 'A')
            {
                if (bfs(i, j, "", n, m))
                {
                    cout << "YES" << nn;
                    cout << ans.size() << nn;
                    cout << ans;
                    return;
                }
                else
                {
                    break;
                }
            }
        }
    }
    cout << "NO";
}

signed main()
{

    /* stuff you should look for
     * int overflow, array bounds
     * special cases (n=1?)
     * do smth instead of nothing and stay organized
     * WRITE STUFF DOWN
     * DON'T GET STUCK ON ONE APPROACH
     */

    fast

        int t = 1;
    // cin >> t;
    for (int i = 1; i <= t; i++)
    {
        solve();
    }
    return 0;
}