CF538D Weird Chess

题目描述

Igor 对国际象棋已经玩腻了,他现在想出新规则来让自己出名。 他的棋盘是一个 $n \times n$ 的方格。Igor 觉得简单才是成功的关键,所以他的游戏只会用一种棋子,并且所有的棋子颜色相同。棋子的移动方式通过一组位移向量来定义。以下是棋子的具体移动规则。 棋盘上的行从上到下编号为 1 到 $n$,列从左到右也从 1 到 $n$ 编号。给每个棋盘格子分配一个整数对 $(x, y)$,表示列号和行号。每种可能的走法由一个整数对 $(dx, dy)$ 定义;使用这种走法,棋子从位置 $(x, y)$ 移到位置 $(x+dx, y+dy)$。只有当目标位置 $(x+dx, y+dy)$ 在棋盘内且没有被其他棋子占据时,这种走法才算有效。在判断能否进行某种走法时,除起点和终点外其他位置上的棋子不影响走法(类似于国际象棋中的马)。 Igor 希望你能找出他的棋子能进行哪些走法。Igor 在棋盘上放置了一些棋子,并告诉你每个未被占据的格子是否被已有棋子攻击(即是否有棋子能从当前位置移动到该格子)。你需要恢复出一种可能的位移向量集合,或者如果这种情况对于任何位移向量集合都是不可能的,则说明 Igor 犯了错误。

输入格式

第一行输入一个整数 $n$($1 \leq n \leq 50$)。 接下来的 $n$ 行中每行包含 $n$ 个字符,描述 Igor 提供的棋盘情况。第 $i$ 行第 $j$ 个字符可以是: - `'o'` —— 这个位置 $(i, j)$ 被一个棋子占据,可能被其它棋子攻击也可能没有; - `'x'` —— 这个位置 $(i, j)$ 已被某个棋子攻击; - `'.'` —— 这个位置 $(i, j)$ 没有被任何棋子攻击。 保证棋盘上至少有一个棋子存在。

输出格式

如果存在一种有效的走法集合,第一行输出 `YES`(不带引号)。接下来,按照输入格式输出一个 $ (2n-1) \times (2n-1) $ 的棋盘,中心位置有一个棋子,用符号 `x` 标记被它攻击的格子。如果有多种可能的答案,输出任何一种即可。 如果不存在有效的走法集合,输出 `NO`。 **本翻译由 AI 自动生成**

说明/提示

In the first sample test the piece is a usual chess rook, and in the second sample test the piece is a usual chess knight.