#include <bits/stdc++.h>
#include <queue>
#define MAXN 100
using namespace std;
int monster_level[MAXN][MAXN]; //monster visited time
int human_level[MAXN][MAXN]; //human visited time
int grid[MAXN][MAXN];
int row, col;
// check if it is possible to move to (x, y)
bool isValidMove(int x, int y)
{
if (x < 0 || x >= row || y < 0 || y >= col)
return false;
return true;
}
//check the cell if it is visited by monster before human
bool is_Forbidden(int x, int y)
{
if(monster_level[x][y]<=human_level[x][y]) return true;
return false;
}
//check escape
bool is_escape(int x, int y)
{
if(x==0 || y==0 || x==row-1 || y==col-1) return true;
return false;
}
// BFS traversal of the grid
void monster_BFS(vector<pair<int,int>>monsters, int row, int col)
{
int x, y;
queue<pair<int, int>> q;
for(pair<int,int>par:monsters){
// mark the starting point as visited
q.push(par);
monster_level[par.first][par.second]=0;
grid[par.first][par.second] = -2; //-2 for monster visited
}
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
while (!q.empty())
{
x = q.front().first;
y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++)
{
int newX = x + dx[i];
int newY = y + dy[i];
if (isValidMove(newX, newY) && grid[newX][newY] != -1 && grid[newX][newY] != -2)
{
// cout<<newX<<" "<<newY<<endl;
q.push({newX, newY});
grid[newX][newY] = -2;
monster_level[newX][newY] = monster_level[x][y] + 1;
}
}
}
}
//cout<<"....."<<endl;
void human_BFS(int startX, int startY,int row, int col)
{
int x, y;
queue<pair<int, int>> q;
// mark the starting point as visited
q.push({startX, startY});
grid[startX][startY] = 1; //1 for human visited
human_level[startX][startY]=0;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
while (!q.empty())
{
x = q.front().first;
y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++)
{
int newX = x + dx[i];
int newY = y + dy[i];
if (isValidMove(newX, newY) && grid[newX][newY] != -1 && grid[newX][newY] != 1 && !is_Forbidden(newX, newY))
{
//cout<<newX<<" "<<newY<<endl;
if(is_escape(newX,newY))
{
cout<<newX<<" "<<newY<<" "<<"YES"<<endl;
return;
}
q.push({newX, newY});
human_level[newX][newY]=human_level[x][y]+1;
grid[newX][newY] = 1;
}
}
}
cout<<"NO";
}
int main()
{
/*
5 8
########
#M..A..#
#.#.M#.#
#M#..#..
#.######
*/
vector<pair<int, int>> monsters;
pair<int,int>start;
cin>>row>>col;
for(int r=0; r<row; r++)
{
string s;
cin>>s;
for(int c=0; c<col; c++)
{
if(s[c]=='#')
grid[r][c]=-1;
else if(s[c]=='.')
grid[r][c]=1;
else if(s[c]=='M')
{
grid[r][c]=-2;
pair<int,int>monster=make_pair(r,c);
monsters.push_back(monster);
}
else if(s[c]=='A')
{
grid[r][c]=1;
start=make_pair(r,c);
}
}
}
for(int i=0;i<row;i++){
//for(int j=0;j<col;j++){
//human_level[i][j]=INT_MAX;
//}
}
monster_BFS(monsters,row,col);
human_BFS(start.first,start.second,row,col);
for(int r=0;r<row;r++){
for(int c=0;c<col;c++){
// cout<<"r:"<<r<<"c:"<<c<<" "<<human_level[r][c]<<" "<<monster_level[r][c]<<endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxxdWV1ZT4KI2RlZmluZSBNQVhOIDEwMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1vbnN0ZXJfbGV2ZWxbTUFYTl1bTUFYTl07IC8vbW9uc3RlciB2aXNpdGVkIHRpbWUKaW50IGh1bWFuX2xldmVsW01BWE5dW01BWE5dOyAgIC8vaHVtYW4gdmlzaXRlZCB0aW1lCmludCBncmlkW01BWE5dW01BWE5dOwoKaW50IHJvdywgY29sOwoKCi8vIGNoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIG1vdmUgdG8gKHgsIHkpCmJvb2wgaXNWYWxpZE1vdmUoaW50IHgsIGludCB5KQp7CiAgICBpZiAoeCA8IDAgfHwgeCA+PSByb3cgfHwgeSA8IDAgfHwgeSA+PSBjb2wpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KLy9jaGVjayB0aGUgY2VsbCBpZiBpdCBpcyB2aXNpdGVkIGJ5IG1vbnN0ZXIgYmVmb3JlIGh1bWFuCmJvb2wgaXNfRm9yYmlkZGVuKGludCB4LCBpbnQgeSkKewogICAgaWYobW9uc3Rlcl9sZXZlbFt4XVt5XTw9aHVtYW5fbGV2ZWxbeF1beV0pIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwp9CgovL2NoZWNrIGVzY2FwZQpib29sIGlzX2VzY2FwZShpbnQgeCwgaW50IHkpCnsKICAgIGlmKHg9PTAgfHwgeT09MCB8fCB4PT1yb3ctMSB8fCB5PT1jb2wtMSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7Cn0KCi8vIEJGUyB0cmF2ZXJzYWwgb2YgdGhlIGdyaWQKdm9pZCBtb25zdGVyX0JGUyh2ZWN0b3I8cGFpcjxpbnQsaW50Pj5tb25zdGVycywgaW50IHJvdywgaW50IGNvbCkKewogICAgaW50IHgsIHk7CiAgICBxdWV1ZTxwYWlyPGludCwgaW50Pj4gcTsKCQogICAgZm9yKHBhaXI8aW50LGludD5wYXI6bW9uc3RlcnMpewogICAgCS8vIG1hcmsgdGhlIHN0YXJ0aW5nIHBvaW50IGFzIHZpc2l0ZWQKICAgIHEucHVzaChwYXIpOwogICAgbW9uc3Rlcl9sZXZlbFtwYXIuZmlyc3RdW3Bhci5zZWNvbmRdPTA7CiAgICBncmlkW3Bhci5maXJzdF1bcGFyLnNlY29uZF0gPSAtMjsgLy8tMiBmb3IgbW9uc3RlciB2aXNpdGVkCiAgICB9CgogICAgaW50IGR4W10gPSB7LTEsIDEsIDAsIDB9OwogICAgaW50IGR5W10gPSB7MCwgMCwgLTEsIDF9OwoKICAgIHdoaWxlICghcS5lbXB0eSgpKQogICAgewogICAgICAgIHggPSBxLmZyb250KCkuZmlyc3Q7CiAgICAgICAgeSA9IHEuZnJvbnQoKS5zZWNvbmQ7CiAgICAgICAgcS5wb3AoKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbmV3WCA9IHggKyBkeFtpXTsKICAgICAgICAgICAgaW50IG5ld1kgPSB5ICsgZHlbaV07CgogICAgICAgICAgICBpZiAoaXNWYWxpZE1vdmUobmV3WCwgbmV3WSkgJiYgZ3JpZFtuZXdYXVtuZXdZXSAhPSAtMSAmJiBncmlkW25ld1hdW25ld1ldICE9IC0yKQogICAgICAgICAgICB7CiAgICAgICAgICAgIC8vCWNvdXQ8PG5ld1g8PCIgIjw8bmV3WTw8ZW5kbDsKICAgICAgICAgICAgICAgIHEucHVzaCh7bmV3WCwgbmV3WX0pOwogICAgICAgICAgICAgICAgZ3JpZFtuZXdYXVtuZXdZXSA9IC0yOwogICAgICAgICAgICAgICAgbW9uc3Rlcl9sZXZlbFtuZXdYXVtuZXdZXSA9IG1vbnN0ZXJfbGV2ZWxbeF1beV0gKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Ci8vY291dDw8Ii4uLi4uIjw8ZW5kbDsKdm9pZCBodW1hbl9CRlMoaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSxpbnQgcm93LCBpbnQgY29sKQp7CiAgICBpbnQgeCwgeTsKICAgIHF1ZXVlPHBhaXI8aW50LCBpbnQ+PiBxOwoKICAgIC8vIG1hcmsgdGhlIHN0YXJ0aW5nIHBvaW50IGFzIHZpc2l0ZWQKICAgIHEucHVzaCh7c3RhcnRYLCBzdGFydFl9KTsKICAgIGdyaWRbc3RhcnRYXVtzdGFydFldID0gMTsgLy8xIGZvciBodW1hbiB2aXNpdGVkCiAgICBodW1hbl9sZXZlbFtzdGFydFhdW3N0YXJ0WV09MDsKICAgIGludCBkeFtdID0gey0xLCAxLCAwLCAwfTsKICAgIGludCBkeVtdID0gezAsIDAsIC0xLCAxfTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkKICAgIHsKICAgICAgICB4ID0gcS5mcm9udCgpLmZpcnN0OwogICAgICAgIHkgPSBxLmZyb250KCkuc2Vjb25kOwogICAgICAgIHEucG9wKCk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG5ld1ggPSB4ICsgZHhbaV07CiAgICAgICAgICAgIGludCBuZXdZID0geSArIGR5W2ldOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGlmIChpc1ZhbGlkTW92ZShuZXdYLCBuZXdZKSAmJiBncmlkW25ld1hdW25ld1ldICE9IC0xICYmIGdyaWRbbmV3WF1bbmV3WV0gIT0gMSAmJiAhaXNfRm9yYmlkZGVuKG5ld1gsIG5ld1kpKQogICAgICAgICAgICB7CiAgICAgICAgICAgIAkvL2NvdXQ8PG5ld1g8PCIgIjw8bmV3WTw8ZW5kbDsKICAgICAgICAgICAgCWlmKGlzX2VzY2FwZShuZXdYLG5ld1kpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvdXQ8PG5ld1g8PCIgIjw8bmV3WTw8IiAiPDwiWUVTIjw8ZW5kbDsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcS5wdXNoKHtuZXdYLCBuZXdZfSk7CiAgICAgICAgICAgICAgICBodW1hbl9sZXZlbFtuZXdYXVtuZXdZXT1odW1hbl9sZXZlbFt4XVt5XSsxOwogICAgICAgICAgICAgICAgZ3JpZFtuZXdYXVtuZXdZXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjb3V0PDwiTk8iOwp9CmludCBtYWluKCkKewogICAgLyoKNSA4CiMjIyMjIyMjCiNNLi5BLi4jCiMuIy5NIy4jCiNNIy4uIy4uCiMuIyMjIyMjCiAgICAqLwogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBtb25zdGVyczsKICAgIHBhaXI8aW50LGludD5zdGFydDsKICAgIGNpbj4+cm93Pj5jb2w7CiAgICBmb3IoaW50IHI9MDsgcjxyb3c7IHIrKykKICAgIHsKICAgICAgICBzdHJpbmcgczsKICAgICAgICBjaW4+PnM7CiAgICAgICAgZm9yKGludCBjPTA7IGM8Y29sOyBjKyspCiAgICAgICAgewogICAgICAgICAgICBpZihzW2NdPT0nIycpCiAgICAgICAgICAgICAgICBncmlkW3JdW2NdPS0xOwogICAgICAgICAgICBlbHNlIGlmKHNbY109PScuJykKICAgICAgICAgICAgICAgIGdyaWRbcl1bY109MTsKICAgICAgICAgICAgZWxzZSBpZihzW2NdPT0nTScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGdyaWRbcl1bY109LTI7CiAgICAgICAgICAgICAgICBwYWlyPGludCxpbnQ+bW9uc3Rlcj1tYWtlX3BhaXIocixjKTsKICAgICAgICAgICAgICAgIG1vbnN0ZXJzLnB1c2hfYmFjayhtb25zdGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHNbY109PSdBJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ3JpZFtyXVtjXT0xOwogICAgICAgICAgICAgICAgc3RhcnQ9bWFrZV9wYWlyKHIsYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGk9MDtpPHJvdztpKyspewoJLy9mb3IoaW50IGo9MDtqPGNvbDtqKyspewoJCS8vaHVtYW5fbGV2ZWxbaV1bal09SU5UX01BWDsKCS8vfQp9CgogICBtb25zdGVyX0JGUyhtb25zdGVycyxyb3csY29sKTsKICAgaHVtYW5fQkZTKHN0YXJ0LmZpcnN0LHN0YXJ0LnNlY29uZCxyb3csY29sKTsKICAgZm9yKGludCByPTA7cjxyb3c7cisrKXsKICAgCWZvcihpbnQgYz0wO2M8Y29sO2MrKyl7CiAgIAkvLwljb3V0PDwicjoiPDxyPDwiYzoiPDxjPDwiICI8PGh1bWFuX2xldmVsW3JdW2NdPDwiICI8PG1vbnN0ZXJfbGV2ZWxbcl1bY108PGVuZGw7CiAgIAl9CiAgIH0KICAgIHJldHVybiAwOwp9Cg==