[cpp]
#include<iostream>
#include<queue>
using namespace std;
char mp[201][201];
int m,n,dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct point
{
int x,y,step;
friend bool operator <(point t1,point t2)
{
return t1.step>t2.step;
}
};
void bfs(point S)
{
int i;
point t,tt;
priority_queue<point>Q;
Q.push(S);
while(!Q.empty())
{
t=Q.top();
Q.pop();
for(i=0;i<4;i++)
{
tt.x=t.x+dir[i][0];tt.y=t.y+dir[i][1]; tt.step=t.step+1;
if(tt.x<1||tt.x>m||tt.y<1||tt.y>n||mp[tt.x][tt.y]=='#') continue;
if(mp[tt.x][tt.y]=='r') {printf("%d\n",tt.step);return;}
if(mp[tt.x][tt.y]=='x') tt.step++;
mp[tt.x][tt.y]='#';
Q.push(tt);
}
}
printf("Poor ANGEL has to stay in the prison all his life.\n");
return;
}
int main()
{
int i,j;
point S;
while(scanf("%d%d",&m,&n)!=EOF)
{
getchar();
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%c",&mp[i][j]);
if(mp[i][j]=='a')
{
S.x=i;
S.y=j;
S.step=0;
}
}
getchar();
}
bfs(S);
}
return 0;
}