#include <iostream>
#include <queue>
using namespace std;
int sx, sy, fx, fy;
char maze[13][13];
int visited[13][13];
int dir[4][2]= {{0,1}, {1,0}, {0,-1}, {-1,0}};
struct Node
{
int x;
int y;
Node(int x = 0, int y = 0):x(x), y(y){};
};
int bfs()
{
queue<Node> q;
Node s = Node(sx, sy);
q.push(s);
visited[sx][sy] = 0;
while(!q.empty())
{
s = q.front();
q.pop();
int step = visited[s.x][s.y]+1;
for(int i = 0; i < 4; i++)
{
int nx = s.x+dir[i][0];
int ny = s.y+dir[i][1];
if(!visited[nx][ny] && maze[nx][ny] == '.' && nx > 0 && nx < 13 && ny > 0 && ny <13)
{
if(nx == fx && ny == fy)
return step;
q.push(Node(nx, ny));
visited[nx][ny] = step;
}
}
}
}
int main()
{
cin >> sx >> sy;
cin >> fx >> fy;
for(int i = 1; i <= 12; i++)
{
for(int j = 1; j <= 12; j++)
{
cin >> maze[i][j];
}
}
cout << bfs() << endl;
getchar();
return 0;
}