CSES - Shared codeLink to this code:
https://cses.fi/paste/828e6f7eccb3882f106a11/
#include<bits/stdc++.h>
#define ar array
using namespace std ;
const int mxN =1e3+2,di[4]={1,0,-1,0},dj[4]={0,1,0,-1};
const char dc[4]={'D','R','U','L'} ;
int n,m,si,sj,d1[mxN][mxN],d2[mxN][mxN],p1[mxN][mxN],p2[mxN][mxN] ;
bool vis[mxN][mxN] ;
string s[mxN] ;
bool e(int i,int j){
return (i<n&&i>=0&&j<m&&j>=0&&s[i][j]=='.'&&!vis[i][j]);
}
void bfs(vector<ar<int,2>>v1,int d[mxN][mxN],int p[mxN][mxN]){
queue<ar<int,2>>qu ;
memset(vis,0,sizeof(vis)) ;
memset(d,0x3f,sizeof(d1)) ;
for(ar<int,2>a :v1){
qu.push(a) ;
vis[a[0]][a[1]]=1 ;
d[a[0]][a[1]]=0 ;
}
while(qu.size()){
ar<int,2>u = qu.front();
qu.pop() ;
for(int k=0;k<4;k++){
int ni=u[0]+di[k],nj=u[1]+dj[k] ;
if(!e(ni,nj))
continue ;
qu.push({ni,nj});
vis[ni][nj]=1 ;
d[ni][nj]=d[u[0]][u[1]]+1 ;
p[ni][nj]=k ;
}
}
}
signed main() {
cin >> n >> m ;
vector<ar<int,2>>v2 ;
for(int i=0;i<n;i++){
cin >> s[i] ;
for(int j=0;j<m;j++){
if(s[i][j]=='M')
v2.push_back({i,j}),s[i][j]='.' ;
if(s[i][j]=='A')
si=i,sj=j,s[i][j]='.' ;
}
}
bfs({{si,sj}},d1,p1);
bfs(v2,d2,p2);
int ti=-1,tj;
for(int i=0;i<n;i++){
if(d1[i][0]<d2[i][0])
ti=i,tj=0 ;
if(d1[i][m-1]<d2[i][m-1])
ti=i,tj=m-1 ;
}
for(int j=0;j<m;j++){
if(d1[0][j]<d2[0][j])
ti=0,tj=j ;
if(d1[n-1][j]<d2[n-1][j])
ti=n-1,tj=j ;
}
if(~ti){
string t ;
cout << "YES\n" ;
while(ti^si || tj^sj){
t+=dc[p1[ti][tj]] ;
int dd= (p1[ti][tj]^2) ;
ti+=di[dd];tj+=dj[dd] ;
}
reverse(t.begin(),t.end());
cout << t.size() << '\n' ;
cout <<t << '\n' ;
}else
cout << "NO" << '\n' ;
}