#include #include using namespace std; int n, m; int dx[4]={0, -1, 0, 1}; int dy[4]={-1, 0, 1, 0}; char a[128][128]; bool chk[128][128]; int d[128][128]; struct qdat{int x, y;}; queue q; bool in_the_grid(int x, int y) { return 1<=x && 1<=y && x<=n && y<=m; } int main() { int i, j, k; qdat cur, nxt; scanf("%d%d", &n, &m); for(i=1;i<=n;i++) { scanf("%s", &a[i][1]); for(j=1;j<=m;j++) a[i][j]-='0'; } scanf("%d%d", &nxt.x, &nxt.y); int ex, ey; scanf("%d%d", &ex, &ey); chk[nxt.x][nxt.y]=true; d[nxt.x][nxt.y]=0; q.push(nxt); while(!q.empty() && !chk[ex][ey]) { cur=q.front(); q.pop(); for(k=0;k<4;k++) { nxt.x=cur.x+dx[k]*a[cur.x][cur.y]; nxt.y=cur.y+dy[k]*a[cur.x][cur.y]; if(in_the_grid(nxt.x, nxt.y) && !chk[nxt.x][nxt.y]) { chk[nxt.x][nxt.y]=true; d[nxt.x][nxt.y]=d[cur.x][cur.y]+1; q.push(nxt); } } } if(chk[ex][ey]) printf("%d\n", d[ex][ey]); else printf("-1\n"); return 0; }