#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
vector<string> mat;
char dir[1001][1001];
long long visited[1001][1001];
struct node
{
long long x,y;
node(long long x1,long long y1)
{
x=x1;
y=y1;
}
};
long long rows[]={0,1,0,-1};
long long cols[]={1,0,-1,0};
char d[] = {'R','D','L','U'};
bool isValid(long long x,long long y,long long n,long long m)
{
return x>=0 && y>=0 && x<n && y<m;
}
int main() {
long long n,m;
cin>>n>>m;
long long starti,startj,endi,endj;
for(long long i=0;i<n;i++)
{
string x;
cin>>x;
mat.push_back(x);
}
for(long long i=0;i<n;i++)
{
//cout<<mat[i]<<endl;
for(long long j=0;j<m;j++)
{
if(mat[i][j] == 'A')
{
starti=i;
startj=j;
}
if(mat[i][j] == 'B')
{
endi=i;
endj=j;
}
dir[i][j] = 'X';
visited[i][j] = 0;
}
}
queue<node*> Q;
Q.push(new node(starti,startj));
//cout<<"starti="<<starti<<" startj="<<startj<<endl;
//cout<<"endi="<<endi<<" endj="<<endj<<endl;
long long flag=0;
while(!Q.empty())
{
node*x = Q.front();
Q.pop();
//cout<<"("<<x->x<<","<<x->y<<")"<<endl;
if(x->x == endi && x->y == endj)
{
flag=1;
break;
}
visited[x->x][x->y]=1;
for(long long i=0;i<4;i++)
{
long long X = x->x + rows[i];
long long Y = x->y + cols[i];
char direction = d[i];
if(isValid(X,Y,n,m) && visited[X][Y] == 0 && (mat[X][Y] != '#'))
{
Q.push(new node(X,Y));
dir[X][Y] = direction;
}
}
}
if(flag == 0)
{
cout<<"NO"<<endl;
}
else
{
long long i=endi;
long long j=endj;
string S="";
while(!(i==starti && j==startj))
{
//cout<<"i="<<i<<" j="<<j<<endl;
if(dir[i][j] == 'U')
{
i++;
S+='U';
}
else if(dir[i][j] == 'D')
{
i--;
S+='D';
}
else if(dir[i][j] == 'L')
{
j++;
S+='L';
}
else if(dir[i][j] == 'R')
{
j--;
S+='R';
}
//cout<<"i="<<i<<" j="<<j<<endl;
}
reverse(S.begin(),S.end());
cout<<"YES"<<endl;
cout<<S.length()<<endl;
cout<<S<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8c3RyaW5nPiBtYXQ7CmNoYXIgZGlyWzEwMDFdWzEwMDFdOwpsb25nIGxvbmcgdmlzaXRlZFsxMDAxXVsxMDAxXTsKCnN0cnVjdCBub2RlCnsKCWxvbmcgbG9uZyB4LHk7Cglub2RlKGxvbmcgbG9uZyB4MSxsb25nIGxvbmcgeTEpCgl7CgkJeD14MTsKCQl5PXkxOwoJfQp9OwoKbG9uZyBsb25nIHJvd3NbXT17MCwxLDAsLTF9Owpsb25nIGxvbmcgY29sc1tdPXsxLDAsLTEsMH07CmNoYXIgZFtdID0geydSJywnRCcsJ0wnLCdVJ307Cgpib29sIGlzVmFsaWQobG9uZyBsb25nIHgsbG9uZyBsb25nIHksbG9uZyBsb25nIG4sbG9uZyBsb25nIG0pCnsKCXJldHVybiB4Pj0wICYmIHk+PTAgJiYgeDxuICYmIHk8bTsKfQoKaW50IG1haW4oKSB7CgoJbG9uZyBsb25nIG4sbTsKCWNpbj4+bj4+bTsKCglsb25nIGxvbmcgc3RhcnRpLHN0YXJ0aixlbmRpLGVuZGo7CgkKCWZvcihsb25nIGxvbmcgaT0wO2k8bjtpKyspCgl7CgkJc3RyaW5nIHg7CgkJY2luPj54OwoJCW1hdC5wdXNoX2JhY2soeCk7Cgl9CgkKCWZvcihsb25nIGxvbmcgaT0wO2k8bjtpKyspCgl7CgkJLy9jb3V0PDxtYXRbaV08PGVuZGw7CgkJZm9yKGxvbmcgbG9uZyBqPTA7ajxtO2orKykKCQl7CgkJCWlmKG1hdFtpXVtqXSA9PSAnQScpCgkJCXsKCQkJCXN0YXJ0aT1pOwoJCQkJc3RhcnRqPWo7CgkJCX0KCQkJaWYobWF0W2ldW2pdID09ICdCJykKCQkJewoJCQkJZW5kaT1pOwoJCQkJZW5kaj1qOwoJCQl9CgkJCWRpcltpXVtqXSA9ICdYJzsKCQkJdmlzaXRlZFtpXVtqXSA9IDA7CgkJfQoJfQoKCXF1ZXVlPG5vZGUqPiBROwoJUS5wdXNoKG5ldyBub2RlKHN0YXJ0aSxzdGFydGopKTsKCQoJLy9jb3V0PDwic3RhcnRpPSI8PHN0YXJ0aTw8IiBzdGFydGo9Ijw8c3RhcnRqPDxlbmRsOwoJLy9jb3V0PDwiZW5kaT0iPDxlbmRpPDwiIGVuZGo9Ijw8ZW5kajw8ZW5kbDsKCWxvbmcgbG9uZyBmbGFnPTA7Cgl3aGlsZSghUS5lbXB0eSgpKQoJewoJCW5vZGUqeCA9IFEuZnJvbnQoKTsKCQlRLnBvcCgpOwoJCS8vY291dDw8IigiPDx4LT54PDwiLCI8PHgtPnk8PCIpIjw8ZW5kbDsKCQlpZih4LT54ID09IGVuZGkgJiYgeC0+eSA9PSBlbmRqKQoJCXsKCQkJZmxhZz0xOwoJCQlicmVhazsKCQl9CgkJCgkJdmlzaXRlZFt4LT54XVt4LT55XT0xOwoJCQoJCWZvcihsb25nIGxvbmcgaT0wO2k8NDtpKyspCgkJewoJCQlsb25nIGxvbmcgWCA9IHgtPnggKyByb3dzW2ldOwoJCQlsb25nIGxvbmcgWSA9IHgtPnkgKyBjb2xzW2ldOwoJCQljaGFyIGRpcmVjdGlvbiA9IGRbaV07CgkJCQoJCQlpZihpc1ZhbGlkKFgsWSxuLG0pICYmIHZpc2l0ZWRbWF1bWV0gPT0gMCAmJiAobWF0W1hdW1ldICE9ICcjJykpCgkJCXsKCQkJCVEucHVzaChuZXcgbm9kZShYLFkpKTsKCQkJCWRpcltYXVtZXSA9IGRpcmVjdGlvbjsgCgkJCX0KCQl9Cgl9CgkKCQoJaWYoZmxhZyA9PSAwKQoJewoJCWNvdXQ8PCJOTyI8PGVuZGw7Cgl9CgllbHNlCgl7CgkJbG9uZyBsb25nIGk9ZW5kaTsKCQlsb25nIGxvbmcgaj1lbmRqOwoJCQoJCXN0cmluZyBTPSIiOwoJCXdoaWxlKCEoaT09c3RhcnRpICYmIGo9PXN0YXJ0aikpCgkJewoJCQkvL2NvdXQ8PCJpPSI8PGk8PCIgaj0iPDxqPDxlbmRsOwoJCQlpZihkaXJbaV1bal0gPT0gJ1UnKQoJCQl7CgkJCQlpKys7CgkJCQlTKz0nVSc7CgkJCX0KCQkJZWxzZSBpZihkaXJbaV1bal0gPT0gJ0QnKQoJCQl7CgkJCQlpLS07CgkJCQlTKz0nRCc7CgkJCX0KCQkJZWxzZSBpZihkaXJbaV1bal0gPT0gJ0wnKQoJCQl7CgkJCQlqKys7CgkJCQlTKz0nTCc7CgkJCX0KCQkJZWxzZSBpZihkaXJbaV1bal0gPT0gJ1InKQoJCQl7CgkJCQlqLS07CgkJCQlTKz0nUic7CgkJCX0KCQkJLy9jb3V0PDwiaT0iPDxpPDwiIGo9Ijw8ajw8ZW5kbDsKCQl9CgkJCgkJCgkJCgkJcmV2ZXJzZShTLmJlZ2luKCksUy5lbmQoKSk7CgkJCgkJY291dDw8IllFUyI8PGVuZGw7CgkJY291dDw8Uy5sZW5ndGgoKTw8ZW5kbDsKCQljb3V0PDxTPDxlbmRsOwoJCQoJfQoJCgoKCXJldHVybiAwOwp9