棋盘上有两枚白子和一枚黑王。每枚白子可能是车(rook)、象(bishop)或后(queen)。当前轮到白方走棋。你代表白方,需要尽快将黑王将死。请编写一个程序,计算在黑方采取最优策略以延长游戏的情况下,白方将死黑王所需的最少步数。
以下是关于国际象棋规则的一些信息:
- 上述局面在国际象棋中是不合法的,因为棋盘上没有白王。除此之外,游戏遵循国际象棋规则。
- 棋盘大小为 $8 \times 8$ 格。棋盘的列用字母 'a' 到 'h' 表示,行用数字 '1' 到 '8' 表示。
- 对局双方(白方和黑方)轮流移动一枚己方棋子。在本题中,我们仅计算白方的移动步数。
- 车可以水平或垂直移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
- 象可以沿对角线移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
- 后可以水平、垂直或沿对角线移动任意数量的空格。它不能跳过其他棋子,也不能停在与己方棋子相同的格子上。
- 将军(check)是指在下一回合威胁要吃掉对方的王。
- 王可以在任何方向(水平、垂直或对角线)移动一格,除非该移动会使王处于被将军的状态。如果满足此条件,王可以移动到已被白子占据的格子上。在这种情况下,该白子被吃掉并从棋盘上移除。
- 将死(checkmate)是指王受到攻击(即处于被将军状态)且没有任何合法的移动可以摆脱威胁的局面。
- 逼和(stalemate)是指轮到移动的一方未被将军,但没有任何合法移动的局面。根据国际象棋规则,当出现逼和时,游戏以平局结束(这对白方而言是不可接受的)。
输入格式
输入的第一行包含位置的数量(最多为 $1.5 \cdot 10^5$),接下来的每一行包含一个位置的描述。一个位置由棋盘上三枚棋子的位置表示:首先是黑王,然后是两枚白子。每枚白子的位置前都有一个类型标识字符:'R' 表示车,'B' 表示象,'Q' 表示后。保证没有两枚棋子占据同一个格子,且初始位置不存在将军状态。除此之外,给定的位置可以是任意的:例如,两枚白子都可以是后。
输出格式
为输入中的每个位置输出一行。该行应包含白方从相应位置开始,保证将死黑王所需的最少步数。如果无法达到目标,则输出 0。
样例
输入 1
2 c7 R f1 R g6 f5 B b3 R h3
输出 1
2 0