Problem:


Score : 400 points

Problem Statement

A maze is composed of a grid of H \times W squares - H vertical, W horizontal.

The square at the i-th row from the top and the j-th column from the left - (i,j) - is a wall if S_{ij} is # and a road if S_{ij} is ..

There is a magician in (C_h,C_w). He can do the following two kinds of moves:

Move A: Walk to a road square that is vertically or horizontally adjacent to the square he is currently in.

Move B: Use magic to warp himself to a road square in the 5\times 5 area centered at the square he is currently in.

In either case, he cannot go out of the maze.

At least how many times does he need to use the magic to reach (D_h, D_w)?

Constraints

1 \leq H,W \leq 10^3

1 \leq C_h,D_h \leq H

1 \leq C_w,D_w \leq W

S_{ij} is # or ..

S_{C_h C_w} and S_{D_h D_w} are ..

(C_h,C_w) \neq (D_h,D_w)

Input

Input is given from Standard Input in the following format:

H W
C_h C_w
D_h D_w
S_{11}\ldots S_{1W}
\vdots
S_{H1}\ldots S_{HW}

Output

Print the minimum number of times the magician needs to use the magic. If he cannot reach (D_h,D_w), print -1 instead.

Sample Input 1

4 4
1 1
4 4
..#.
..#.
.#..
.#..

Sample Output 1

1

For example, by walking to (2,2) and then using the magic to travel to (4,4), just one use of magic is enough.

Note that he cannot walk diagonally.

Sample Input 2

4 4
1 4
4 1
.##.
####
####
.##.

Sample Output 2

-1

He cannot move from there.

Sample Input 3

4 4
2 2
3 3
....
....
....
....

Sample Output 3

0

No use of magic is needed.

Sample Input 4

4 5
1 2
2 5
#.###
####.
#..##
#..##

Sample Output 4

2



Sample input:
4 4
1 1
4 4
..#.
..#.
.#..
.#..


Sample output:
1

Submission status: Accepted

Solution code:
# compiled by pythran
"""
#pythran export main2()
import numpy as np
i4 = np.int32
i8 = np.int64

INF = 1000000000


def solve(a, ch, cw):
    sh1 = np.empty(1000000, i4)
    sw1 = np.empty(1000000, i4)
    p1 = 0
    sh2 = np.empty(1000000, i4)
    sw2 = np.empty(1000000, i4)
    p2 = 0

    dis = 0
    a[ch, cw] = dis
    sh1[p1] = ch
    sw1[p1] = cw
    p1 += 1

    while True:
        while p1 > 0:
            p1 -= 1
            h = sh1[p1]
            w = sw1[p1]
            for i in range(-2, 3):
                for j in range(-2, 3):
                    if ((i == 1 or i == -1) and j == 0) or (i == 0 and (j == 1 or j == -1)):
                        if a[h + i, w + j] > dis:
                            a[h + i, w + j] = dis
                            sh1[p1] = h + i
                            sw1[p1] = w + j
                            p1 += 1
                    else:
                        if a[h + i, w + j] > dis + 1:
                            a[h + i, w + j] = dis + 1
                            sh2[p2] = h + i
                            sw2[p2] = w + j
                            p2 += 1

        dis += 1
        for i in range(p2):
            if a[sh2[i], sw2[i]] == dis:
                sh1[p1] = sh2[i]
                sw1[p1] = sw2[i]
                p1 += 1
        p2 = 0

        if p1 == 0:
            break

    return a


def main(in_file):
    stdin = open(in_file)
    H, W = [int(x) for x in stdin.readline().split()]
    ch, cw = [int(x) for x in stdin.readline().split()]
    dh, dw = [int(x) for x in stdin.readline().split()]
    a = np.empty((H + 4, W + 4), i8)
    for i in range(H + 4):
        for j in range(W + 4):
            a[i, j] = -1
    t = stdin.read()
    m = 0
    for i in range(2, H + 2):
        for j in range(2, W + 3):
            if ord(t[m]) == 46:
                a[i, j] = INF
            m += 1
    solve(a, ch + 1, cw + 1)
    ans = a[dh + 1, dw + 1]
    if ans == INF:
        print(-1)
    else:
        print(ans)


def main2():
    main('/dev/stdin')
"""
import os, sys
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
if len(sys.argv) == 1:
    import subprocess
    if p == "":
        pymain = "./" + pymain
    subprocess.call(pymain)
else:
    import gzip, base64, stat
    gz = b'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'
    bin = gzip.decompress(base64.b64decode(gz))
    with open(pymain, "wb") as f:
        f.write(bin)
    os.chmod(pymain, 0o775)

Submission status: Accepted

Solution code:
from collections import deque
def solve():
    H,W = map(int,input().split())
    Ch,Cw = map(lambda x:int(x)-1,input().split())
    Dh,Dw = map(lambda x:int(x)-1,input().split())
    A = [list(input()) for _ in range(H)]
    V = [[-1]*W for _ in range(H)]
    d = ((1,0),(0,1),(-1,0),(0,-1))

    def bfs_2d(sy,sx,v):
        que = deque()
        V[sy][sx] = v
        que.append((sy,sx))

        while que:
            uh, uw = que.popleft()
            for dy, dx in d:
                next_h = uh+dy
                next_w = uw+dx
                if 0 <= next_h < H and 0 <= next_w < W \
                    and A[next_h][next_w] == '.' \
                    and V[next_h][next_w] == -1:
                    V[next_h][next_w] = v
                    que.append((next_h,next_w))
    
    vertex = 0
    for h in range(H):
        for w in range(W):
            if A[h][w] == '#' or V[h][w] != -1:
                continue
            bfs_2d(h,w,vertex)
            vertex += 1

    G = [[] for _ in range(vertex)]
    used = [set() for _ in range(vertex)]
    for h in range(H):
        for w in range(W):
            if A[h][w] == '#':
                continue
            for dh in range(-2, 2+1):
                for dw in range(-2, 2+1):
                    if h + dh < 0 or H <= h + dh or w + dw < 0 or W <= w + dw:
                        continue
                    if A[h+dh][w+dw] == "#":
                        continue
                    if V[h][w] == V[h+dh][w+dw]:
                        continue
                    if V[h+dh][w+dw] in used[V[h][w]]:
                        continue
                    G[V[h][w]].append((V[h+dh][w+dw]))
                    used[V[h][w]].add((V[h+dh][w+dw]))
    
    # s = V[Ch][Cw]
    # g = V[Dh][Dw]

    # dist = [-1 for _ in range(vertex)]
    # que = deque()
    # dist[s] = 0
    # que.append(s)
    # while que:
    #     u = que.popleft()
    #     for v in G[u]:
    #         if dist[v] != -1:
    #             continue
    #         dist[v] = dist[u] + 1
    #         que.append(v)
    
    # print(dist[g])

    start_area_num = int(V[Ch][Cw])
    goal_area_num = int(V[Dh][Dw])

    dist = [-1] * vertex
    dist[start_area_num] = 0
    q = deque()
    q.append(start_area_num)
    while len(q) > 0:
        cur_area_num = q.popleft()
        if cur_area_num == goal_area_num:
            print(dist[cur_area_num])
            return
        
        for next_area_num in G[cur_area_num]:
            if dist[next_area_num] == -1:
                dist[next_area_num] = dist[cur_area_num] + 1
                q.append(next_area_num)
    else:
        print(-1)

if __name__ == '__main__':
    solve()