// compile: make data
// run: ./data < data.in
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#ifdef LOCAL
#include <debug/codeforces.h>
#define debug(x...) _debug_print(#x, x);
#else
#define debug(x...) {};
#endif
template<typename...Args> void print_(Args...args){((cout<<args<<" "),...)<<endl;}
#define rep(i,a,b) for(int i=(a);i<(int)(b);++i)
#define sz(v) ((int)(v).size())
#define print(...) print_(__VA_ARGS__);
#define INTMAX (int)(9223372036854775807)
#define INF (int)(1152921504606846976)
#define double long double
#define int long long
#define MAXN 200010
const int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
struct node {
int x, y, d;
};
int n, m, sx, sy;
vector<vector<int>> a, dis;
vector<vector<pair<int, int>>> pre;
queue<node> q;
void bfs() {
while (!q.empty()) {
auto [x, y, d] = q.front(); q.pop();
rep(i, 0, 4) {
int nx = x + dir[i][0], ny = y + dir[i][1];
if (a[nx][ny] && dis[nx][ny] == INF) {
dis[nx][ny] = dis[x][y] + 1;
q.push({nx, ny, d});
}
}
}
}
int32_t main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> n >> m;
a.resize(n + 2, vector<int>(m + 2));
dis.resize(n + 2, vector<int>(m + 2, INF));
pre.resize(n + 2, vector<pair<int, int>>(m + 2, {-1, -1}));
rep(i, 1, n+1) {
string s; cin >> s;
rep(j, 1, m+1) {
if (s[j-1] == '.') a[i][j] = 1;
else if (s[j-1] == 'A') sx = i, sy = j, a[i][j] = 1;
else if (s[j-1] == 'M') {
a[i][j] = 2;
dis[i][j] = 0;
q.push({i, j, 0});
}
}
}
bfs();
q = {};
q.push({sx, sy, 0});
pre[sx][sy] = {-1, -1};
vector<vector<int>> vis(n + 2, vector<int>(m + 2));
vis[sx][sy] = 1;
pair<int, int> found = {-1, -1};
if (sx == 1 || sx == n || sy == 1 || sy == m) found = {sx, sy};
while (!~found.first && !~found.second && !q.empty()) {
auto [x, y, d] = q.front(); q.pop();
rep(i, 0, 4) {
int nx = x + dir[i][0], ny = y + dir[i][1];
if (!vis[nx][ny] && a[nx][ny] && d+1 < dis[nx][ny]) {
vis[nx][ny] = 1;
q.push({nx, ny, d + 1});
pre[nx][ny] = {x, y};
if (nx == 1 || nx == n || ny == 1 || ny == m) {
found = {nx, ny};
break;
}
}
}
}
if (!~found.first && !~found.second) {
print("NO")
return 0;
}
vector<pair<int, int>> ans;
while (found.first != -1 && found.second != -1) {
ans.push_back(found);
found = pre[found.first][found.second];
}
reverse(ans.begin(), ans.end());
cout << "YES\n" << sz(ans) - 1 << endl;
rep(i, 1, sz(ans)) {
if (ans[i].first == ans[i-1].first + 1) cout << 'D';
else if (ans[i].first == ans[i-1].first - 1) cout << 'U';
else if (ans[i].second == ans[i-1].second + 1) cout << 'R';
else if (ans[i].second == ans[i-1].second - 1) cout << 'L';
}
cout << endl;
return 0;
}
Heard about pkr777game from a buddy and I’m hooked. The interface is slick and they got all the classics. Definitely worth checking out: pkr777game
Superacegame8, huh? New name to me. Might give it a whirl tonight. Fingers crossed for some good luck! Check out superacegame8 if you’re looking for something new!
33win8bet… hmm, checked it out. Not bad! Sports betting section seems pretty comprehensive. Worth a look if you’re into that. 33win8bet
Fast loading times and no annoying pop ups. It is refreshing to find a site that respects the player’s time. Logging in via yoswinlogin is always a smooth process.
Amazing selection of slots and the winning streaks have been great lately. I’m totally hooked on xojilicasino now!