Link to this code: https://cses.fi/paste/12f26954efdf021166265a/
#include<bits/stdc++.h>
using namespace std;
class Path{
int n,m;
vector<vector<char>>labyrinth;
vector<vector<int>>vis;
int X[4]={-1,0,1,0};
int Y[4]={0,1,0,-1};
string direction="URDL";
public:
 Path(int n,int m,vector<vector<char>>labyrinth){
  this->n=n;
  this->m=m;
  this->labyrinth=labyrinth;
  vis.resize(n,vector<int>(m,-1));
 }
 bool isValid(int i,int j){
  return (i>=0 and i<n and j>=0 and j<m and labyrinth[i][j]!='#' and vis[i][j]==-1);
 }
 string ValidPathExist(int i,int j){
   queue<pair<int,int>>que;
   que.push({i,j});
   int x,y,prev;
   string path;
   int Bx=-1,By=-1;
   vis[i][j]=-1;
   while(!que.empty()){
       x=que.front().first;
       y=que.front().second;
       que.pop();
       if(labyrinth[x][y]=='B'){
        Bx=x;
        By=y;
        break;
       }
       for(int i=0;i<4;i++){
         if(isValid(x+X[i],y+Y[i])){
           vis[x+X[i]][y+Y[i]]=i;
           que.push({x+X[i],y+Y[i]});
         }
       }
   }
   if(Bx==-1)return "";
   while(Bx!=i or By!=j){
     prev=vis[Bx][By];
     path+=direction[prev];
     Bx-=X[prev];
     By-=Y[prev];
   }
   reverse(path.begin(),path.end());
   return path;
 }
};
int main() {
  int n,m,startX,startY;
  cin>>n>>m;
  vector<vector<char>>labyrinth(n,vector<char>(m));
  for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      cin>>labyrinth[i][j];
      if(labyrinth[i][j]=='A'){
        startX=i;
        startY=j;
      }
    }
  }
  Path p(n,m,labyrinth);
  string path=p.ValidPathExist(startX,startY);
  if(path!=""){
    cout<<"YES\n"<<path.size()<<endl<<path<<endl;
  }else{
    cout<<"NO\n";
  }
}