#include<iostream>
#include<queue>
using namespace std;
struct jon{
int x,y,ci;
};
bool L[101][101];
int main()
{
jon ru;
int X,Y,MX,MY;
cin>>X>>Y>>ru.x>>ru.y;
ru.ci=0;
char c[Y+1][X+1];
for(int i=1;i<=Y;i++)
for(int j=1;j<=X;j++)
{
cin>>c[i][j];
if(c[i][j]=='*')
L[i][j]=1;
}
queue<jon>Q;
Q.push(ru);
L[ru.x][ru.y]=1;
jon wr;
while(!Q.empty())
{
bool uff=1;
for(int i=1;i<=Y;i++)
{
for(int j=1;j<=X;j++)
if(L[i][j]==0)
uff=0;
}
if(uff==1)
break;
wr=Q.front();
Q.pop();
if(wr.x+1<=Y&&L[wr.x+1][wr.y]==0&&c[wr.x+1][wr.y]!='*')
{
L[wr.x+1][wr.y]=1;
Q.push((jon){wr.x+1,wr.y,wr.ci+1});
}
if(wr.x-1>=1&&L[wr.x-1][wr.y]==0&&c[wr.x-1][wr.y]!='*')
{
L[wr.x-1][wr.y]=1;
Q.push((jon){wr.x-1,wr.y,wr.ci+1});
}
if(wr.y+1<=X&&L[wr.x][wr.y+1]==0&&c[wr.x][wr.y+1]!='*')
{
L[wr.x][wr.y+1]=1;
Q.push((jon){wr.x,wr.y+1,wr.ci+1});
}
if(wr.y-1>=1&&L[wr.x][wr.y-1]==0&&c[wr.x][wr.y-1]!='*')
{
L[wr.x][wr.y-1]=1;
Q.push((jon){wr.x,wr.y-1,wr.ci+1});
}
if(wr.x+1<=Y&&wr.y+1<=X&&L[wr.x+1][wr.y+1]==0&&c[wr.x+1][wr.y+1]!='*')
{
L[wr.x+1][wr.y+1]=1;
Q.push((jon){wr.x+1,wr.y+1,wr.ci+1});
}
if(wr.x+1<=Y&&wr.y-1>=1&&L[wr.x+1][wr.y-1]==0&&c[wr.x+1][wr.y-1]!='*')
{
L[wr.x+1][wr.y-1]=1;
Q.push((jon){wr.x+1,wr.y-1,wr.ci+1});
}
if(wr.x-1>=1&&wr.y+1<=X&&L[wr.x-1][wr.y+1]==0&&c[wr.x-1][wr.y+1]!='*')
{
L[wr.x-1][wr.y+1]=1;
Q.push((jon){wr.x-1,wr.y+1,wr.ci+1});
}
if(wr.x-1>=1&&wr.y-1>=1&&L[wr.x-1][wr.y-1]==0&&c[wr.x-1][wr.y-1]!='*')
{
L[wr.x-1][wr.y-1]=1;
Q.push((jon){wr.x-1,wr.y-1,wr.ci+1});
}
}
cout<<wr.ci+1;
return 0;
}