#1 #9 #10 WA求大佬指教
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#define int long long
using namespace std;
struct node
{
int x,y;
};
int dx[12]={1,-1,0,0,1,1,-1,-1};
int dy[12]={0,0,1,-1,1,-1,-1,1};
queue<node>q;
char g[110][110];
int w,h,x1,y1;
int dis[110][110];
bool end()
{
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++)
{
if(g[i][j]=='.')return false;
}
return true;
}
signed main(){
memset(dis,-1,sizeof(dis));
cin>>h>>w>>x1>>y1;
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++)
{cin>>g[i][j];}
dis[x1][y1]=1;
q.push({x1,y1});
g[x1][y1]='M';
while(!q.empty())
{
node cur=q.front();
q.pop();
if(end())
{
cout<<dis[cur.x][cur.y];
return 0;
}
for(int i=0;i<8;i++)
{
int xx=cur.x+dx[i];
int yy=cur.y+dy[i];
if(dis[xx][yy]==-1&&g[xx][yy]=='.')
{
dis[xx][yy]=dis[cur.x][cur.y]+1;
g[xx][yy]='M';
q.push({xx,yy});
}
}
}
return 0;
}