#include<bits/stdc++.h>
using namespace std;
const int MAXN = 101;
int qx, qy, gx, gy;
char a[MAXN][MAXN];
int d[MAXN][MAXN];
int fx[4] = {0, 1, 0, -1};
int fy[4] = {1, 0, -1, 0};
void dfs(int x, int y, int k) {
if (k >= d[x][y]) return; // 如果当前路径不是最优的,直接返回
d[x][y] = k; // 更新当前位置的最短路径
for (int i = 0; i < 4; i++) {
int tx = x + fx[i];
int ty = y + fy[i];
if (tx >= 1 && tx < MAXN && ty >= 1 && ty < MAXN && a[tx][ty] != '#') {
if (a[tx][ty] == 'x') {
dfs(tx, ty, k + 2); // 遇到守卫,需要额外1单位时间
} else {
dfs(tx, ty, k + 1);
}
}
}
}
int main() {
int x, y; // x和y表示地图的尺寸,应该使用其他变量名以避免与坐标变量冲突
cin >> x >> y;
for (int i = 0; i < MAXN; i++) { // 初始化d数组为INT_MAX
for (int j = 0; j < MAXN; j++) {
d[i][j] = INT_MAX;
}
}
for (int i = 1; i <= x; i++) {
for (int j = 1; j <= y; j++) {
cin >> a[i][j];
if (a[i][j] == 'r') {
qx = i;
qy = j;
} else if (a[i][j] == 'a') {
gx = i;
gy = j;
}
}
}
dfs(qx, qy, 0);
int zdbs = d[gx][gy];
if (zdbs == INT_MAX) cout << "Impossible";
else cout << zdbs;
return 0;
}
/**************************************************************
Problem: 1901
User: zengdongxin
Language: C++
Result: Accepted
Time:1966 ms
Memory:2772 kb
****************************************************************/