#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define mogaAc ios_base::sync_with_stdio(false);
int arr[1005][1005];
bool visited[1005][1005];
int n, m;
void bfs(int i, int j)
{
queue<pair<string, pair<ll, pair<ll, ll>>>> urutan;
string cadangan = "";
urutan.push({cadangan, {0, {i, j}}});
while (!urutan.empty())
{
ll letaki = urutan.front().second.second.first;
ll letakj = urutan.front().second.second.second;
ll jarak = urutan.front().second.first;
string path = urutan.front().first;
visited[letaki][letakj] = true;
if (arr[letaki][letakj] == 2)
{
cout << "YES" << endl;
cout << jarak << endl;
cout << path << endl;
exit(0);
}
urutan.pop();
if (letaki + 1 < n && arr[letaki + 1][letakj] > 0 && !visited[letaki + 1][letakj])
{
string pathN = path + "D";
urutan.push({pathN, {jarak + 1, {letaki + 1, letakj}}});
}
if (letaki - 1 >= 0 && arr[letaki - 1][letakj] > 0 && !visited[letaki - 1][letakj])
{
string pathN = path + "U";
urutan.push({pathN, {jarak + 1, {letaki - 1, letakj}}});
}
if (letakj + 1 < m && arr[letaki][letakj + 1] > 0 && !visited[letaki][letakj + 1])
{
string pathN = path + "R";
urutan.push({pathN, {jarak + 1, {letaki, letakj + 1}}});
}
if (letakj - 1 >= 0 && arr[letaki][letakj - 1] > 0 && !visited[letaki][letakj - 1])
{
string pathN = path + "L";
urutan.push({pathN, {jarak + 1, {letaki, letakj - 1}}});
}
}
cout << "NO" << endl;
exit(0);
}
int main()
{
mogaAc;
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> m;
int Awali = 0;
int Awalj = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
char a;
cin >> a;
if (a == '.')
{
arr[i][j] = 1;
}
if (a == 'A')
{
arr[i][j] = 1;
Awali = i;
Awalj = j;
}
if (a == 'B')
{
arr[i][j] = 2;
}
}
}
bfs(Awali, Awalj);
return 0;
}
// int main()
// {
// vector<int> a;
// a.pb(4);
// a.pb(5);
// a.pb(8);
// a.pb(7);
// vector<int> b;
// b = a;
// for (int i = 0; i < b.size(); i++)
// {
// cout << b[i] << endl;
// }
// }
// arrayy------------------------------------------------------
// buat ngecek array 1 apakah sama dengan array 2:
// bool sama = equal(arr, arr + size, arr1);
// buat ngecek besar dari array:
// int size = sizeof(arr) / sizeof(arr[0]);
// indexke LowerBound/upperbound
// auto it = upper_bound(arr.begin(), arr.end(), x);
// int index = distance(arr.begin(), it);
// cara cepet buat sorting-------------------------------------
// dari kecil ke besar : sort(arr.begin(), arr.end());
// dari besar ke kecil : sort(arr.begin(), arr.end(), greater<int>());
// logaritma
// anggap a=base, b=yang ingin di log, seperti logA (B)
// rumus : log(b)/log(a)
// Statitiska
// menghitung rata rata data tambahan baru
// R0 * (S0/S1) + (Data baru)/S1
// R = Rata rata
// S = Banyak data
// 0 = yang lama
// 1 = yang baru
// ArrayGACORBINSERT (KALAU ELEMENTNYA CUMA 1)
// set atau map
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBtb2dhQWMgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CmludCBhcnJbMTAwNV1bMTAwNV07CmJvb2wgdmlzaXRlZFsxMDA1XVsxMDA1XTsKaW50IG4sIG07CnZvaWQgYmZzKGludCBpLCBpbnQgaikKewogICAgcXVldWU8cGFpcjxzdHJpbmcsIHBhaXI8bGwsIHBhaXI8bGwsIGxsPj4+PiB1cnV0YW47CiAgICBzdHJpbmcgY2FkYW5nYW4gPSAiIjsKICAgIHVydXRhbi5wdXNoKHtjYWRhbmdhbiwgezAsIHtpLCBqfX19KTsKICAgIHdoaWxlICghdXJ1dGFuLmVtcHR5KCkpCiAgICB7CiAgICAgICAgbGwgbGV0YWtpID0gdXJ1dGFuLmZyb250KCkuc2Vjb25kLnNlY29uZC5maXJzdDsKICAgICAgICBsbCBsZXRha2ogPSB1cnV0YW4uZnJvbnQoKS5zZWNvbmQuc2Vjb25kLnNlY29uZDsKICAgICAgICBsbCBqYXJhayA9IHVydXRhbi5mcm9udCgpLnNlY29uZC5maXJzdDsKICAgICAgICBzdHJpbmcgcGF0aCA9IHVydXRhbi5mcm9udCgpLmZpcnN0OwogICAgICAgIHZpc2l0ZWRbbGV0YWtpXVtsZXRha2pdID0gdHJ1ZTsKCiAgICAgICAgaWYgKGFycltsZXRha2ldW2xldGFral0gPT0gMikKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKICAgICAgICAgICAgY291dCA8PCBqYXJhayA8PCBlbmRsOwogICAgICAgICAgICBjb3V0IDw8IHBhdGggPDwgZW5kbDsKICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICB9CiAgICAgICAgdXJ1dGFuLnBvcCgpOwogICAgICAgIGlmIChsZXRha2kgKyAxIDwgbiAmJiBhcnJbbGV0YWtpICsgMV1bbGV0YWtqXSA+IDAgJiYgIXZpc2l0ZWRbbGV0YWtpICsgMV1bbGV0YWtqXSkKICAgICAgICB7CiAgICAgICAgICAgIHN0cmluZyBwYXRoTiA9IHBhdGggKyAiRCI7CiAgICAgICAgICAgIHVydXRhbi5wdXNoKHtwYXRoTiwge2phcmFrICsgMSwge2xldGFraSArIDEsIGxldGFran19fSk7CiAgICAgICAgfQogICAgICAgIGlmIChsZXRha2kgLSAxID49IDAgJiYgYXJyW2xldGFraSAtIDFdW2xldGFral0gPiAwICYmICF2aXNpdGVkW2xldGFraSAtIDFdW2xldGFral0pCiAgICAgICAgewogICAgICAgICAgICBzdHJpbmcgcGF0aE4gPSBwYXRoICsgIlUiOwogICAgICAgICAgICB1cnV0YW4ucHVzaCh7cGF0aE4sIHtqYXJhayArIDEsIHtsZXRha2kgLSAxLCBsZXRha2p9fX0pOwogICAgICAgIH0KICAgICAgICBpZiAobGV0YWtqICsgMSA8IG0gJiYgYXJyW2xldGFraV1bbGV0YWtqICsgMV0gPiAwICYmICF2aXNpdGVkW2xldGFraV1bbGV0YWtqICsgMV0pCiAgICAgICAgewogICAgICAgICAgICBzdHJpbmcgcGF0aE4gPSBwYXRoICsgIlIiOwogICAgICAgICAgICB1cnV0YW4ucHVzaCh7cGF0aE4sIHtqYXJhayArIDEsIHtsZXRha2ksIGxldGFraiArIDF9fX0pOwogICAgICAgIH0KICAgICAgICBpZiAobGV0YWtqIC0gMSA+PSAwICYmIGFycltsZXRha2ldW2xldGFraiAtIDFdID4gMCAmJiAhdmlzaXRlZFtsZXRha2ldW2xldGFraiAtIDFdKQogICAgICAgIHsKICAgICAgICAgICAgc3RyaW5nIHBhdGhOID0gcGF0aCArICJMIjsKICAgICAgICAgICAgdXJ1dGFuLnB1c2goe3BhdGhOLCB7amFyYWsgKyAxLCB7bGV0YWtpLCBsZXRha2ogLSAxfX19KTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICJOTyIgPDwgZW5kbDsKICAgIGV4aXQoMCk7Cn0KCmludCBtYWluKCkKewogICAgbW9nYUFjOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwoKICAgIGNpbiA+PiBuID4+IG07CgogICAgaW50IEF3YWxpID0gMDsKICAgIGludCBBd2FsaiA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgYTsKICAgICAgICAgICAgY2luID4+IGE7CiAgICAgICAgICAgIGlmIChhID09ICcuJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYXJyW2ldW2pdID0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYSA9PSAnQScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFycltpXVtqXSA9IDE7CiAgICAgICAgICAgICAgICBBd2FsaSA9IGk7CiAgICAgICAgICAgICAgICBBd2FsaiA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGEgPT0gJ0InKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhcnJbaV1bal0gPSAyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgYmZzKEF3YWxpLCBBd2Fsaik7CiAgICByZXR1cm4gMDsKfQovLyBpbnQgbWFpbigpCi8vIHsKLy8gICAgIHZlY3RvcjxpbnQ+IGE7Ci8vICAgICBhLnBiKDQpOwovLyAgICAgYS5wYig1KTsKLy8gICAgIGEucGIoOCk7Ci8vICAgICBhLnBiKDcpOwovLyAgICAgdmVjdG9yPGludD4gYjsKLy8gICAgIGIgPSBhOwovLyAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiLnNpemUoKTsgaSsrKQovLyAgICAgewovLyAgICAgICAgIGNvdXQgPDwgYltpXSA8PCBlbmRsOwovLyAgICAgfQovLyB9CgovLyBhcnJheXktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gIGJ1YXQgbmdlY2VrIGFycmF5IDEgYXBha2FoIHNhbWEgZGVuZ2FuIGFycmF5IDI6Ci8vICAgYm9vbCBzYW1hID0gZXF1YWwoYXJyLCBhcnIgKyBzaXplLCBhcnIxKTsKLy8gICBidWF0IG5nZWNlayBiZXNhciBkYXJpIGFycmF5OgovLyAgIGludCBzaXplID0gc2l6ZW9mKGFycikgLyBzaXplb2YoYXJyWzBdKTsKLy8gaW5kZXhrZSBMb3dlckJvdW5kL3VwcGVyYm91bmQKLy8gYXV0byBpdCA9IHVwcGVyX2JvdW5kKGFyci5iZWdpbigpLCBhcnIuZW5kKCksIHgpOwovLyBpbnQgaW5kZXggPSBkaXN0YW5jZShhcnIuYmVnaW4oKSwgaXQpOwovLyBjYXJhIGNlcGV0IGJ1YXQgc29ydGluZy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gZGFyaSBrZWNpbCBrZSBiZXNhciA6IHNvcnQoYXJyLmJlZ2luKCksIGFyci5lbmQoKSk7Ci8vIGRhcmkgYmVzYXIga2Uga2VjaWwgOiBzb3J0KGFyci5iZWdpbigpLCBhcnIuZW5kKCksIGdyZWF0ZXI8aW50PigpKTsKLy8gbG9nYXJpdG1hCi8vIGFuZ2dhcCBhPWJhc2UsIGI9eWFuZyBpbmdpbiBkaSBsb2csIHNlcGVydGkgbG9nQSAoQikKLy8gcnVtdXMgOiBsb2coYikvbG9nKGEpCi8vIFN0YXRpdGlza2EKLy8gbWVuZ2hpdHVuZyByYXRhIHJhdGEgZGF0YSB0YW1iYWhhbiBiYXJ1Ci8vIFIwICogKFMwL1MxKSArIChEYXRhIGJhcnUpL1MxCi8vIFIgPSBSYXRhIHJhdGEKLy8gUyA9IEJhbnlhayBkYXRhCi8vIDAgPSB5YW5nIGxhbWEKLy8gMSA9IHlhbmcgYmFydQovLyBBcnJheUdBQ09SQklOU0VSVCAoS0FMQVUgRUxFTUVOVE5ZQSBDVU1BIDEpCi8vIHNldCBhdGF1IG1hcA==