给定一个$N \times M$的网格,每个单元格可能是障碍物1或空单元格0。铅笔会从所有方向攻击你。铅笔在遇到障碍物时会停止。你每单位时间可以移动到相邻的四个方向(上下左右)的单元格。你需要处理$Q$个查询,每个查询给出铅笔的攻击方向和你当前的位置,找到到达安全单元格的最小时间,或者判断是否不可能。

picture source: https://www.twoplayergames.org/

输入

第一行包含两个整数$N$和$M$。
接下来$N$行,每行包含一个长度为$M$的字符串,由01组成,表示网格。其中0表示空单元格,1表示障碍物。
接下来一行包含一个整数$Q$。
接下来$Q$行,每行包含一个字符$D$和两个整数$x$, $y$,表示铅笔的攻击方向和你当前的位置。

输出

对于每个查询,输出到达安全单元格的最小时间,如果不可能则输出-1

数据范围

对于所有测试数据,保证:
$1 \le N,M$ 和 $N \times M \le 9 \times 10^6$
$1 \le Q \le 5 \times 10^5$
$1 \le x \le N$
$1 \le y \le M$
$D =$ L / R / U / D

数据编号 $N, M$ $Q$ 特殊性质
1 $N=1, M \le 100$ $\le 100$
2-5 $N=2, M=2$ $\le 100$
6-8 $N=2, M \le 10^6$ $\le 100$ 所有障碍物都在第一行
9-10 $N=2, M \le 10^6$ $\le 5 \times 10^5$ 所有障碍物都在第一行
11-15 $N \times M \le 9 \times 10^6$ $\le 5$ 铅笔总是向下移动
16-20 $N \times M \le 9 \times 10^6$ $\le 5 \times 10^5$

Sample Test Cases

Input Output
3 3
000
010
010
3
R 1 2
U 3 1
D 3 3
2
3
-1

对于第一个查询,最短路径为(1,2)->(1,3)->(2,3)。

对于第二个查询,最短路径为(3,1)->(2,1)->(1,1)->(1,2)。

对于第三个查询,不可能不受到攻击。

7 7
0100001
0000010
0000000
0001010
1010000
0000000
0000110
8
D 7 2
R 3 2
L 3 2
L 6 3
U 2 7
D 6 6
L 6 2
R 6 7
0
2
1
1
2
0
1
1

对于第一个查询,起始位置是安全的。

对于第二个查询,最短路径为(3,2)->(4,2)->(5,2)。

对于第五个查询,最短路径为(2,7)->(3,7)->(3,6)。

/pencil3.in /pencil3.ans

此样例满足第2-5测试点的限制

/pencil4.in /pencil4.ans

此样例满足第6-8测试点的限制

/pencil5.in /pencil5.ans

此样例满足第9-10测试点的限制

/pencil6.in /pencil6.ans

此样例满足第11-15测试点的限制

/pencil7.in /pencil7.ans

此样例满足第16-20测试点的限制

Click to copy.

Scoring: Per Case
Authored by s22l19, s23f32 and wy24215
Appeared in 2025 Mini Comp 4 [WY Interschool Pre-SDIC]