#1014. S - 两扇门(Two_doors)

S - 两扇门(Two_doors)

题目描述

有一个 N×NN\times N 的网格。用 (i,j)(i,j) 表示从上往下第 ii 行、从左往右第 jj 列的方格。

两个共边相邻方格之间的状态用一个字符 cc 表示:

  • .:两格之间没有障碍,可以自由通行;
  • D:两格之间有一扇普通门,可以自由通行;
  • A:两格之间有特殊门 A,可以自由通行;
  • B:两格之间有特殊门 B,可以自由通行;
  • #:两格之间有墙,无法通行。

特殊门 A 和特殊门 B 在整个网格中各恰好出现一次。

相邻方格之间的状态由字符串

S1,S2,,SN1,T1,T2,,TNS_1,S_2,\ldots,S_{N-1},T_1,T_2,\ldots,T_N

给出:

  • 1iN11\le i\le N-11jN1\le j\le N(i,j)(i,j)(i+1,j)(i+1,j) 之间的状态为 Si,jS_{i,j}
  • 1iN1\le i\le N1jN11\le j\le N-1(i,j)(i,j)(i,j+1)(i,j+1) 之间的状态为 Ti,jT_{i,j}

若可以从 (1,1)(1,1) 出发,只经过可通行的边,通过上下左右移动到达 (N,N)(N,N),则称网格处于好状态

你可以封锁若干扇普通门 D,使它们变得无法通行;不能封锁 .,也不能在这一阶段封锁特殊门 A、B。要求封锁后满足:

  1. 网格仍处于好状态;
  2. 无论再额外封锁特殊门 A 或特殊门 B 中的哪一扇,网格都仍处于好状态;
  3. 若再额外同时封锁特殊门 A 和特殊门 B,网格将不再处于好状态。

判断能否满足这些条件。若可以,求最少需要封锁多少扇普通门;否则输出 1-1

共有 TT 组测试数据,请分别求解。

限制条件

  • 1T1051\le T\le 10^5
  • 2N402\le N\le 40
  • SiS_i 是长度为 NN、仅由 .,D,A,B,# 组成的字符串。
  • TiT_i 是长度为 N1N-1、仅由 .,D,A,B,# 组成的字符串。
  • AB 在所有 Si,j,Ti,jS_{i,j},T_{i,j} 中各恰好出现一次。
  • 所有测试数据中 N2N^2 的总和不超过 2×1052\times 10^5
  • 所有测试数据中 N4N^4 的总和不超过 40440^4

输入

T
case_1
case_2
...
case_T

每组测试数据的格式如下:

N
S_1
S_2
...
S_{N-1}
T_1
T_2
...
T_N

输出

输出 TT 行。第 ii 行输出第 ii 组测试数据的答案。若无法满足条件,输出 1-1

样例输入 1

6
2
.A
.
B
2
.A
#
B
3
#D.
#BD
.A
.#
..
4
DDBD
..#D
#D.D
#DD
#DD
.A.
#.#
4
D.#D
DD#.
D.B.
#D.
.#D
...
.DA
9
DDD.D#DDD
DDDADDDDD
DD.DDDDDD
DDDD#.DDD
DD#DDDD.#
DDDDD#.#D
DD.#..DDD
DDDDD#D.D
DDD...DD
D#.D#D#D
D#DD#D.#
DDD#DD##
BDDD.D#D
DD#DDDDD
DDDDD#DD
DDD#DDDD
##DDD.#D

样例输出 1

0
-1
0
3
-1
7

例如,第一组测试数据在不封锁任何普通门时就已经满足全部条件,因此答案为 00