小z想去蛋糕店买甜甜圈。
小z居住的城镇由 H 行 W 列的网格状区域构成,每个区域是道路或墙壁。
以下,将从上往下第 i 行(1 \leq i \leq H)、从左往右第 j 列(1 \leq j \leq W)的区域表示为区域 (i, j)。
各区域的信息由 H 个长度为 W 的字符串 S_1, S_2, \ldots, S_H 给出。具体来说,当 S_i 的第 j 个字符(1 \leq i \leq H,1 \leq j \leq W)为 `.` 时,区域 (i, j) 是道路;当为 `#` 时,区域 (i, j) 是墙壁。
小z可以按任意顺序重复执行以下两种操作:
- 移动到上下左右相邻的、位于城镇内且为道路的区域。
- 选择一个上下左右方向,进行**前踢**。
当小z进行前踢时,可以将当前区域在该方向上 **前 1 格** 和 **前 2 格** 的区域(如果它们是墙壁)变为道路。
注意:即使前 1 格或前 2 格位于城镇外,仍然可以进行前踢操作,但城镇外的区域不会发生变化。
小z最初位于区域 (A, B),想要到达位于区域 (C, D) 的蛋糕店。
保证小z初始所在的区域及蛋糕店所在的区域是道路。
请计算小z到达蛋糕店所需的最小**前踢次数**。
第一行两个数字 H 行 W 列表示地图的大小;
接下来 H 行 W 列字符,表示地图的内容;
子厚四个数字A,B,C,D,表示地图的起点和蛋糕店的地址;
输出小z到达蛋糕店所需的最小**前踢次数**。
10 10 .......... #########. #.......#. #..####.#. ##....#.#. #####.#.#. .##.#.#.#. ###.#.#.#. ###.#.#.#. #.....#... 1 1 7 1
1
1 3 .#. 1 1 1 3
1
20 20 #################### ##...##....###...### #.....#.....#.....## #..#..#..#..#..#..## #..#..#....##..##### #.....#.....#..##### #.....#..#..#..#..## #..#..#.....#.....## #..#..#....###...### #################### #################### ##..#..##...###...## ##..#..#.....#.....# ##..#..#..#..#..#..# ##..#..#..#..#..#..# ##.....#..#..#..#..# ###....#..#..#..#..# #####..#.....#.....# #####..##...###...## #################### 3 3 18 18
3
- 1 \leq H \leq 1000
- 1 \leq W \leq 1000
- S_i 是仅由 `.` 和 `#` 组成的长度为 W 的字符串
- 1 \leq A, C \leq H
- 1 \leq B, D \leq W
- (A, B) \neq (C, D)
- H, W, A, B, C, D 均为整数
- 小z初始所在的区域及蛋糕店所在的区域保证是道路
样例解释 1
小z最初位于区域 (1, 1)。通过反复移动到道路区域,可以到达区域 (7, 4)。在区域 (7, 4) 向左方向进行前踢后,区域 (7, 3) 和 (7, 2) 会从墙壁变为道路。之后,通过反复移动(包括新变为道路的区域)即可到达位于区域 (7, 1) 的蛋糕店。此时前踢次数为 1 次,且无法在不使用前踢的情况下到达蛋糕店,因此输出 1。
样例解释 2
前踢操作可能影响包含蛋糕店所在区域的区画,但蛋糕店所在区域原本就是道路,因此不会发生变化。特别是前踢操作不会破坏蛋糕店。