U371370 信使国际象棋

题目背景

国际象棋(Chess),又称西洋棋,是一种二人对弈的智力游戏。棋盘为正方形,由 $64$ 个黑白(深色与浅色)相间的格子组成;棋子分黑白(深色与浅色)两方共 $32$ 枚,每方各 $16$ 枚。虽然汉语称之为西洋棋或国际象棋,但是实际上它起源于亚洲,后由阿拉伯人传入欧洲,成为国际通行棋种,也是一项智力竞技运动,曾被列为奥林匹克运动会正式比赛项目。 小 Z 在偶然间了解到一种特殊的国际象棋形式,名为信使国际象棋(Messager Chess),与普通国际象棋不同的是,该变种将原国际象棋中的象(主教,Bishop)变换成了信使(Messager)。 小 Z 觉得信使国际象棋非常有趣,但他沉迷于跟 Rubyonly 菜鸡互啄,需要你帮助他写一个程序来记录信使国际象棋的整个流程。

题目描述

信使国际象棋在一个 $8 \times 8$( $8$ 行 $8$ 列)的网格棋盘上进行,网格上的每个格点都可以有棋子停留。对弈双方一方执白(white)棋、另一方执黑(black)棋,双方轮流执行操作,轮到一位玩家操作时,他必须选择一枚自己的棋子,并按照规则进行一步移动。 规定一局信使国际象棋由白方执先手,并设计了初始棋盘布局如下: ![](https://cdn.luogu.com.cn/upload/image_hosting/1um72zpr.png) 棋子分为 $6$ 类,分别如下: - 兵(兵卒,Pawn),白兵共 $8$ 个位于 $a_2,b_2,\dots, g_2, h_2$ ,黑兵共 $8$ 个位于 $a_7,b_7,\dots, g_7, h_7$ 。白兵只能向上移动 $1$ 格,向左上 $1$ 格或右上 $1$ 格吃子,黑兵只能向下移动 $1$ 格,向左下 $1$ 格或右下 $1$ 格吃子。特别的,兵的第 $1$ 步可以向上(黑兵为下)一次性移动 $2$ 格(当然可以移动 $1$ 格)。本题中**不考虑**兵的升变。 - 车(战车,Rook),白车共 $2$ 个位于 $a_1, h_1$ ,黑车共 $2$ 个位于 $a_8, h_8$ 。车横竖均可任意移动或吃子,不受限制,但是不可越子或连续吃子(同一步内)。本题中**不考虑**王车易位。 - 马(骑士,kNight),白马共 $2$ 个位于 $b_1, g_1$ ,黑马共 $2$ 个位于 $b_8, g_8$ 。马每步棋先横走或竖走一格,然后再**往外**斜走一格;或者先斜走一格,最后再**往外**横走或竖走一格(即走“日”字)。可以越子,没有中国象棋中的“蹩马腿”限制。如位于 $d_5$ 的马可以移动到 $c_7, e_7, f_6, f_4, e_3, c_3, b_6, b_4$ 。 - 信使(Messager,上图中用象表示,但**不为象**),白信使共 $2$ 个位于 $c_1, f_1$ ,黑信使共 $2$ 个位于 $c_8, f_8$ 。信使每次可以向某一个确定方向斜着任意移动,格数不限,不能越子,**不能吃子**。特别的,如果一个棋子周围 $8$ 格内存在异色(敌方)信使,该棋子**不能移动不能吃子**。但是其他棋子可以经过信使周围 $8$ 格移动且不受影响,也可从信使周围 $8$ 格以外的范围吃掉信使。 - 后(皇后,Queen),白后共 $1$ 个,位于 $d1$ ,黑后共 $1$ 个,位于 $d8$ 。后横竖斜 $8$ 个方向均可任意移动或吃子,不受限制,但是不可越子或连续吃子(同一步内)。 - 王(国王,King),白王共 $1$ 个,位于 $e1$ ,黑王共 $1$ 个,位于 $e8$ 。王横竖斜 $8$ 个方向均可移动一格或吃子(仅限移动一格吃子)。本题中不考虑“送王”规则,即王是可以送给对面吃的,被将军(Check)时也可以不移动王。本题中,当任意一方的王被吃后,对局应该**立刻**结束,之后的任何移动都是不合法的。 本题中非法移动的定义有: - 移动到棋盘以外的格子; - 不按照棋子规定的方式移动,如越子移动或非法吃子或在对方信使周边移动己方棋子; - 任何一方的王被吃后,不应当存在任何移动。

输入格式

输入一共 $q + 1$ 行,$q$ 的含义如下文所示: 第 $1$ 行有一个整数 $q$, 表示一共双方进行了 $q$ 次移动。 第 $2$ 行至第 $q + 1$ 行,各包含 $2$ 个位置 $ x_1y_1, x_2y_2$, 表示该步将位于 $x_1y_1$ 的棋子移动到 $x_2y_2$,习惯上,我们用小写字母 $a$ 到 $h$ 来表示 $x$。

输出格式

如果说存在某一步移动是非法的, 输出一行 `Error`。 否则输出在 $q$ 次操作后,剩余的棋子的局面: 共 $8$ 行,每行 $8$ 个字符(换行符除外),分别代表每个格子,习惯上,我们要求将 $a1$ 格置于左下角, $h1$ 格置于右下角($a1$ 和 $h1$ 均为白方车(战车,Rook)所在位置,且 $d1$ 为白方后(皇后,Queen)所在位置)。 特别的,我们使用 $\texttt{.}$ 来表示空格(**不区分**颜色), $\texttt{P}$ 表示兵(兵卒,Pawn), $\texttt{R}$ 表示车(战车,Rook), $\texttt{N}$ 表示马(骑士,Knight), $\texttt{M}$ 表示信使(Messager), $\texttt{Q}$ 表示后(皇后,Queen), $\texttt{K}$ 表示王(国王,King),所表示棋子**不区分**颜色。

说明/提示

$0 \leqslant q \leqslant 100$。 **保证** $(x_1, y_1)$ 或 $(x_2, y_2)$ 均为棋盘上的格子。