#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define arwa ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int N = 1005;
vector<int> adj[N];
char a[N][N];
int n, m;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
bool valid(int x, int y) {
return (x >= 0 && x < n && y >= 0 && y < m && a[x][y] != '#');
}
string bfs(int sx, int sy, int ex, int ey) {
queue<pair<int, int>> q;
q.push({sx, sy});
map<pair<int, int>, pair<int, int>> parents;
parents[q.front()] = {-1, -1};
bool isThereAPath = false;
while (!q.empty()) {
pair<int, int> p = q.front();
int X = p.first, Y = p.second;
q.pop();
if (X == ex && Y == ey) {
isThereAPath = true;
break;
}
for (int i = 0; i < 4; i++) {
int nx = X + dx[i], ny = Y + dy[i];
if (valid(nx, ny) && parents.find({nx, ny}) == parents.end()) {
parents[{nx, ny}] = {X, Y};
q.push({nx, ny});
}
}
}
vector<pair<int, int>> path;
if (isThereAPath) {
pair<int, int> current = {ex, ey};
while (current != make_pair(-1, -1)) {
path.push_back(current);
current = parents[current];
}
reverse(path.begin(), path.end());
string pathChar = "";
pair<int, int> prevPoint = {sx, sy};
for (int i = 1; i < path.size(); i++) {
if (path[i].first < prevPoint.first)
pathChar += 'U';
else if (path[i].first > prevPoint.first)
pathChar += 'D';
else if (path[i].second < prevPoint.second)
pathChar += 'L';
else if (path[i].second > prevPoint.second)
pathChar += 'R';
prevPoint = path[i];
}
return pathChar;
}
return "";
}
void solve() {
cin >> n >> m;
int sx, sy, ex, ey;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
if (a[i][j] == 'A') {
sx = i, sy = j;
}
if (a[i][j] == 'B') {
ex = i;
ey = j;
}
}
}
string ans = bfs(sx, sy, ex, ey);
if (ans.empty()) {
cout << "NO\n";
return;
}
cout << "YES\n" << ans.size() << "\n" << ans << "\n";
}
int main() {
arwa
int t = 1;
// cin >> t;
while (t--) {
solve();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYXJ3YSBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CmNvbnN0IGludCBOID0gMTAwNTsKdmVjdG9yPGludD4gYWRqW05dOwpjaGFyIGFbTl1bTl07CmludCBuLCBtOwppbnQgZHhbXSA9IHswLCAwLCAxLCAtMX07CmludCBkeVtdID0gezEsIC0xLCAwLCAwfTsKCmJvb2wgdmFsaWQoaW50IHgsIGludCB5KSB7CiAgICByZXR1cm4gKHggPj0gMCAmJiB4IDwgbiAmJiB5ID49IDAgJiYgeSA8IG0gJiYgYVt4XVt5XSAhPSAnIycpOwp9CgpzdHJpbmcgYmZzKGludCBzeCwgaW50IHN5LCBpbnQgZXgsIGludCBleSkgewogICAgcXVldWU8cGFpcjxpbnQsIGludD4+IHE7CiAgICBxLnB1c2goe3N4LCBzeX0pOwogICAgbWFwPHBhaXI8aW50LCBpbnQ+LCBwYWlyPGludCwgaW50Pj4gcGFyZW50czsKICAgIHBhcmVudHNbcS5mcm9udCgpXSA9IHstMSwgLTF9OwogICAgYm9vbCBpc1RoZXJlQVBhdGggPSBmYWxzZTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIHBhaXI8aW50LCBpbnQ+IHAgPSBxLmZyb250KCk7CiAgICAgICAgaW50IFggPSBwLmZpcnN0LCBZID0gcC5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgaWYgKFggPT0gZXggJiYgWSA9PSBleSkgewogICAgICAgICAgICBpc1RoZXJlQVBhdGggPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICAgIGludCBueCA9IFggKyBkeFtpXSwgbnkgPSBZICsgZHlbaV07CiAgICAgICAgICAgIGlmICh2YWxpZChueCwgbnkpICYmIHBhcmVudHMuZmluZCh7bngsIG55fSkgPT0gcGFyZW50cy5lbmQoKSkgewogICAgICAgICAgICAgICAgcGFyZW50c1t7bngsIG55fV0gPSB7WCwgWX07CiAgICAgICAgICAgICAgICBxLnB1c2goe254LCBueX0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gcGF0aDsKICAgIGlmIChpc1RoZXJlQVBhdGgpIHsKICAgICAgICBwYWlyPGludCwgaW50PiBjdXJyZW50ID0ge2V4LCBleX07CiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbWFrZV9wYWlyKC0xLCAtMSkpIHsKICAgICAgICAgICAgcGF0aC5wdXNoX2JhY2soY3VycmVudCk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBwYXJlbnRzW2N1cnJlbnRdOwogICAgICAgIH0KICAgICAgICByZXZlcnNlKHBhdGguYmVnaW4oKSwgcGF0aC5lbmQoKSk7CiAgICAgICAgc3RyaW5nIHBhdGhDaGFyID0gIiI7CiAgICAgICAgcGFpcjxpbnQsIGludD4gcHJldlBvaW50ID0ge3N4LCBzeX07CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXRoLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGlmIChwYXRoW2ldLmZpcnN0IDwgcHJldlBvaW50LmZpcnN0KQogICAgICAgICAgICAgICAgcGF0aENoYXIgKz0gJ1UnOwogICAgICAgICAgICBlbHNlIGlmIChwYXRoW2ldLmZpcnN0ID4gcHJldlBvaW50LmZpcnN0KQogICAgICAgICAgICAgICAgcGF0aENoYXIgKz0gJ0QnOwogICAgICAgICAgICBlbHNlIGlmIChwYXRoW2ldLnNlY29uZCA8IHByZXZQb2ludC5zZWNvbmQpCiAgICAgICAgICAgICAgICBwYXRoQ2hhciArPSAnTCc7CiAgICAgICAgICAgIGVsc2UgaWYgKHBhdGhbaV0uc2Vjb25kID4gcHJldlBvaW50LnNlY29uZCkKICAgICAgICAgICAgICAgIHBhdGhDaGFyICs9ICdSJzsKCiAgICAgICAgICAgIHByZXZQb2ludCA9IHBhdGhbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXRoQ2hhcjsKICAgIH0KICAgIHJldHVybiAiIjsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IG07CiAgICBpbnQgc3gsIHN5LCBleCwgZXk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICBpZiAoYVtpXVtqXSA9PSAnQScpIHsKICAgICAgICAgICAgICAgIHN4ID0gaSwgc3kgPSBqOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhW2ldW2pdID09ICdCJykgewogICAgICAgICAgICAgICAgZXggPSBpOwogICAgICAgICAgICAgICAgZXkgPSBqOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc3RyaW5nIGFucyA9IGJmcyhzeCwgc3ksIGV4LCBleSk7CiAgICBpZiAoYW5zLmVtcHR5KCkpIHsKICAgICAgICBjb3V0IDw8ICJOT1xuIjsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBjb3V0IDw8ICJZRVNcbiIgPDwgYW5zLnNpemUoKSA8PCAiXG4iIDw8IGFucyA8PCAiXG4iOwp9CgppbnQgbWFpbigpIHsKICAgIGFyd2EKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0K