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;
}