#include <iostream> #include <stdio.h> #include <string> #include <string.h> #include <algorithm> #include <stdlib.h> #include <math.h> #include <queue> using namespace std; const int maxn = 205; const int inf = 0xfffffff; struct node{ int x,y; int step; int time; void set(int xx,int yy,int s,int t){ x = xx; y = yy; step = s; time = t; } }; int n,m; int sx,sy,ax,ay; int dir[4][2] = {1,0,0,1,-1,0,0,-1}; char grid[maxn][maxn]; int mintime[maxn][maxn]; int cango(int x,int y){ return (x>=1&&x<=n&&y>=1&&y<=m); } void init(){ for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++) mintime[i][j] = inf; } void bfs(node start){ node now,next; queue<node>que; que.push(start); while(!que.empty()){ now = que.front(); que.pop(); for(int i = 0;i < 4;i++){ int xx = now.x + dir[i][0]; int yy = now.y + dir[i][1]; if(cango(xx, yy)&&grid[xx][yy] != '#'){ next.set(xx,yy,now.step+1,now.time+1); if(grid[xx][yy] == 'x') next.time++; if(next.time<mintime[xx][yy]){ mintime[xx][yy] = next.time; que.push(next); } } } } } int main(){ while(~scanf("%d%d",&n,&m)){ for(int i = 1;i <= n;i++) scanf("%s",grid[i]+1); for(int i = 1;i <= n;i++) for(int j = 1;j <= m;j++){ if(grid[i][j] == 'a'){ ax = i; ay = j; } if(grid[i][j] == 'r'){ sx = i; sy = j; } } node st; init(); st.set(sx,sy,0,0); bfs(st); /*for(int i = 1;i <= n;i++){ for(int j = 1;j <= m;j++) printf("%10d ",mintime[i][j]); printf("\n"); }*/ if(mintime[ax][ay] != inf) printf("%d\n",mintime[ax][ay]); else printf("Poor ANGEL has to stay in the prison all his life.\n"); } return 0; }