#include <bits/stdc++.h> using namespace std; const int N = 1010; int n,m,sx,sy,fx,fy; char g[N][N]; int d[N][N]; bool vis[N][N]; queue<pair<int,int>> q; int dx[] = {1,-1,0,0},dy[] = {0,0,1,-1}; void bfs(int sx,int sy){ memset(d,0x3f,sizeof d); d[sx][sy] = 0; vis[sx][sy] = 1; q.push({sx,sy}); while(q.size()){ int x = q.front().first; int y = q.front().second; q.pop(); if(x==fx&&y==fy){ cout<<d[x][y]; return; } for(int i = 0;i<4;i++){ int a = x + dx[i],b = y + dy[i]; if(a<1||a>n||b<1||b>m) continue; if(d[a][b]<d[x][y]+1) continue; if(g[a][b]=='*'||vis[a][b]) continue; vis[a][b] = 1; d[a][b] = d[x][y] + 1; q.push({a,b}); } } cout<<-1; } int main(){ cin>>n>>m; cin>>sx>>sy>>fx>>fy; for(int i = 1;i<=n;i++) scanf("%s",g[i]+1); bfs(sx,sy); return 0; }