你拥有一个无限大的棋盘。在这个任务中,棋盘是一个无限的二维方格网,每个方格由一对整数 $(r, c)$ 索引,分别表示行和列。棋盘上当前唯一的棋子是“超级棋子”(superpiece)。你将获得一个超级棋子有效移动方式的列表,该列表由一个包含 "QRBNKP" 字符子集的非空字符串指定。在每一回合中,超级棋子可以按照给定的棋子类型之一进行移动。超级棋子最初位于方格 $(a, b)$。请计算到达方格 $(c, d)$ 所需的最少移动次数。
本题适用的棋子规则子集如下。
共有六种类型的棋子:皇后(queen)、车(rook)、象(bishop)、马(knight)、王(king)和兵(pawn)。它们的移动方式如下:
- 皇后(用 'Q' 表示)可以移动到与当前所在方格处于同一行、同一列或同一对角线上的任何方格。形式化地,对于任何整数 $k \neq 0$,皇后可以从 $(a, b)$ 移动到 $(a, b + k)$、$(a + k, b)$、$(a + k, b + k)$ 和 $(a + k, b - k)$。
- 车(用 'R' 表示)可以移动到与当前所在方格处于同一行或同一列上的任何方格。形式化地,对于任何整数 $k \neq 0$,车可以从 $(a, b)$ 移动到 $(a + k, b)$ 和 $(a, b + k)$。
- 象(用 'B' 表示)可以移动到与当前所在方格处于同一对角线上的任何方格。形式化地,对于任何整数 $k \neq 0$,象可以从 $(a, b)$ 移动到 $(a + k, b + k)$ 和 $(a + k, b - k)$。
- 马(用 'N' 表示)可以以“L”形移动:即先沿某个方向移动两格,然后沿垂直方向移动一格。形式化地,马可以从 $(a, b)$ 移动到 $(a + 1, b + 2)$、$(a + 1, b - 2)$、$(a + 2, b + 1)$、$(a + 2, b - 1)$、$(a - 2, b + 1)$、$(a - 2, b - 1)$、$(a - 1, b + 2)$ 和 $(a - 1, b - 2)$。
- 王(用 'K' 表示)可以移动到与当前方格直接相邻的八个方格中的任何一个。形式化地,王可以从 $(a, b)$ 移动到 $(a, b + 1)$、$(a, b - 1)$、$(a + 1, b)$、$(a - 1, b)$、$(a + 1, b + 1)$、$(a + 1, b - 1)$、$(a - 1, b + 1)$ 和 $(a - 1, b - 1)$。
- 兵(用 'P' 表示)可以向上移动恰好一格。形式化地,兵可以从 $(a, b)$ 移动到 $(a + 1, b)$。
请注意,你可能了解的其他国际象棋规则或移动方式在本题中不适用;请仅使用上述列出的规则。 此外,请注意,虽然表示棋子的符号通常是其英文名称的首字母,但“马”(kNight)使用的是第二个字母(以避免与“王”(King)混淆)。
输入格式
输入的第一行包含一个整数 $q$,表示你的程序将被测试的查询数量。接下来的每两行描述一个查询:
- 查询的第一行包含一个非空字符串,指定超级棋子可以模拟的棋子集合。该字符串包含大写字符串 "QRBNKP" 中的字符子集,且包含的字符按相同顺序排列。换句话说,它是 "QRBNKP" 的一个子序列。
- 查询的第二行包含四个空格分隔的整数 $a, b, c, d$,分别表示超级棋子的起始位置和目标位置。保证 $(a, b) \neq (c, d)$,即起始位置与目标位置不同。
输出格式
对于每个查询,输出一行,包含一个整数 $m$,表示超级棋子从起始位置到达目标位置所需的最少移动次数。如果无法从起始位置到达目标位置,则输出 $-1$。
数据范围
- $1 \le q \le 1000$
- $-10^8 \le a, b, c, d \le 10^8$
- 棋盘在所有方向上都是无限的。
子任务
- 子任务 1(12 分):每个查询的第一行不包含 'N' 字符,且保证包含 'Q' 字符。
- 子任务 2(9 分):每个查询的第一行保证包含 'Q' 和 'N' 字符。
- 子任务 3(13 分):每个查询的第一行不包含 'Q' 字符,且保证包含 'R' 字符。
- 子任务 4(8 分):每个查询的第一行始终为 "B"。
- 子任务 5(6 分):每个查询的第一行不包含 'Q' 或 'R' 字符,且保证包含 'B' 字符。
- 子任务 6(31 分):每个查询的第一行始终为 "N"。
- 子任务 7(8 分):每个查询的第一行不包含 'Q'、'R' 或 'B' 字符,且保证包含 'N' 字符。
- 子任务 8(7 分):每个查询的第一行不包含 'Q'、'R'、'B' 或 'N' 字符,且保证包含 'K' 字符。
- 子任务 9(6 分):每个查询的第一行始终为 "P"。
注意:子任务的顺序并不代表其预期的难度。
样例
样例输入 1
2 NKP 3 3 5 1 NKP 2 6 5 3
样例输出 1
2 2
样例输入 2
2 B 2 8 3 6 B 2 8 5 5
样例输出 2
-1 1
样例输入 3
2 Q 3 3 4 5 QR 4 1 1 4
样例输出 3
2 1
说明
测试用例 1: 在第一个查询中,我们被要求使用马、王和兵的移动方式从 $(3, 3)$ 到达 $(5, 1)$。恰好用 2 步完成的方法有多种,例如: 先作为兵移动到 $(4, 3)$,然后作为马移动到 $(5, 1)$。 先作为马移动到 $(5, 2)$,然后作为王移动到 $(5, 1)$。 * 先作为王移动到 $(4, 2)$,然后再作为王移动到 $(5, 1)$。 没有办法用少于两步完成——我们需要象或皇后才能做到。 在第二个查询中,我们被要求从 $(2, 6)$ 到达 $(5, 3)$。同样,最优解是使用两步。这一次,这两步都必须是马的移动,中间方格为 $(4, 5)$ 或 $(3, 4)$。
测试用例 2: 在第一个查询中,我们被要求从 $(2, 8)$ 到达 $(3, 6)$。仅提供象的移动方式,无法做到这一点。 在第二个查询中,我们被要求从 $(2, 8)$ 到达 $(5, 5)$,同样仅使用象的移动方式。可以在一步内完成。
测试用例 3: 在第一个查询中,我们被要求使用皇后的移动方式从 $(3, 3)$ 到达 $(4, 5)$。可以在两步内完成,例如,以 $(4, 4)$ 作为中间点。 在第二个查询中,我们被要求使用皇后和车的移动方式从 $(4, 1)$ 到达 $(1, 4)$。可以在一步内完成。