#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<queue>
#define MAX 210
using namespace std;
char map[MAX][MAX];
bool visit[MAX][MAX];
int dir[2][4]={{0,0,1,-1},{1,-1,0,0}};
int step[MAX][MAX];
int m,n,s,t;
struct node
{
int x,y;
bool ok()
{
if(0<=x&&x<m&&0<=y&&y<n)
return true;
return false;
}
};
int spfa()
{
int i,j;
node u,v;
u.x=0;
u.y=0;
memset(step,-1,sizeof(step));
memset(visit,0,sizeof(visit));
queue<node>q;
q.push(u);
visit[0][0]=true;
step[0][0]=0;
while(!q.empty())
{
u=q.front();
q.pop();
visit[u.x][u.y]=0;
for(i=0;i<4;i++)
{
v.x=u.x+dir[0][i];
v.y=u.y+dir[1][i];
if(v.ok())
{
if(step[v.x][v.y]>step[u.x][u.y]+(map[v.x][v.y]=='#'?4:1)||step[v.x][v.y]==-1)
{
step[v.x][v.y]=step[u.x][u.y]+(map[v.x][v.y]=='#'?4:1);
if(!visit[v.x][v.y])
{
q.push(v);
visit[v.x][v.y]=1;
}
}
}
}
}
return step[s-1][t-1];
}
int main()
{
int i,j;
while(~scanf("%d%d",&m,&n))
{
for(i=0;i<m;i++)
scanf("%s",map[i]);
scanf("%d%d",&s,&t);
printf("%d\n",spfa());
}
}