import sys from collections import deque def main(): H, W, ra, ca, rb, cb = map(int, sys.stdin.readline().split()) grid = [] for _ in range(H): grid.append(list(sys.stdin.readline().strip())) directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] start_ushi = (ra-1, ca-1) start_hikari = (rb-1, cb-1) target_ushi = (rb-1, cb-1) target_hikari = (ra-1, ca-1) visited = dict() q = deque() q.append((start_ushi[0], start_ushi[1], start_hikari[0], start_hikari[1], 0)) visited[(start_ushi[0], start_ushi[1], start_hikari[0], start_hikari[1])] = 0 answer = -1 while q: ur, uc, hr, hc, steps = q.popleft() if (ur, uc) == target_ushi and (hr, hc) == target_hikari: answer = steps break for dr, dc in directions: nur = ur + dr nuc = uc + dc if 0 <= nur < H and 0 <= nuc < W: if grid[nur][nuc] == '.' and (nur, nuc) != (hr, hc): if (nur, nuc, hr, hc) not in visited or visited[(nur, nuc, hr, hc)] > steps + 1: visited[(nur, nuc, hr, hc)] = steps + 1 q.append((nur, nuc, hr, hc, steps + 1)) for dr, dc in directions: nhr = hr + dr nhc = hc + dc if 0 <= nhr < H and 0 <= nhc < W: if grid[nhr][nhc] == '.' and (nhr, nhc) != (ur, uc): if (ur, uc, nhr, nhc) not in visited or visited[(ur, uc, nhr, nhc)] > steps + 1: visited[(ur, uc, nhr, nhc)] = steps + 1 q.append((ur, uc, nhr, nhc, steps + 1)) print(answer if answer != -1 else -1) if __name__ == '__main__': main()