#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y;
};
int ans;
int n,m;
queue<node> q;
char c[101][101];
int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
//int jx[8] = {0,0,-1,1,-1,1,1,-1};
//int jy[8] = {1,-1,0,0,-1,1,-1,1};
void bfs(char mp[101][101]){
q.push({1,1});
while(!q.empty()){
node p = q.front();
q.pop();
if(mp[p.x][p.y]=='l'){
cout << ans<<endl;
return ;
}
for(int i = 0;i < 4;i++){
int xl = p.x + dx[i];
int yl = p.y + dy[i];
if((yl >= 1) && (yl <= m) && (xl >= 1) && (xl <= n ) && mp[xl][yl] != 'X'){
q.push({xl,yl});
mp[xl][yl] = 'X';
++ans;
}
}
}
cout << "Poor Harry\n";
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin >> c[i][j];
}
}
while(1){
int i,j,k,l;
cin >> i >> j >> k >> l;
if(i == 0 && j == 0&& k == 0&& l == 0){
return 0;
}
char mp[101][101];
for(int a = 1;a <= n;a++){
for(int b = 1;b <= m;b++){
mp[a][b] = 'X';
}
}
for(int a = 1;a <= n;a++){
for(int b = 1;b <= m;b++){
mp[a][b] = c[a][b];
}
}
int a=n,b=m;
while(mp[a][b] != 'X'){
mp[a][b++] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a++][b] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a][b--] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a--][b] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a++][b--] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a--][b--] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a--][b++] = 'l';
}
a=n,b=m;
while(mp[a][b] != 'X'){
mp[a++][b++] = 'l';
}
bfs(mp);
}
}