CF1421B Putting Bricks in the Wall

题目描述

Pink Floyd 正在对 Roger Waters 开一个玩笑。他们知道他不喜欢墙([walls](https://www.youtube.com/watch?v=YR5ApYxkU-U)),他想要自由地行走,所以他们正在阻止他离开他的房间,这个房间可以看作是一个网格。 Roger Waters 有一个 $n \times n$ 的正方形网格,他想从左上角($1,1$)走到右下角($n,n$)。Waters 可以从一个格子移动到与其相邻的任意一个格子(仅限于四个方向),只要他还在网格内。此外,除了格子 $(1,1)$ 和 $(n,n)$ 以外,每个格子里都有一个 $0$ 或 $1$。 在开始行走前,他会选择 $0$ 或 $1$ 中的一个数字,并且只能走到值等于他所选数字的格子。起点 $(1,1)$ 和终点 $(n,n)$ 不受此规则限制,他可以无论选择哪个数字都经过这两个格子。因此,格子 $(1,1)$ 的值用字母 'S' 表示,格子 $(n,n)$ 的值用字母 'F' 表示。 例如,在第一个样例测试中,他可以沿着以下路径只经过值为 $0$ 的格子,从 $(1,1)$ 走到 $(n,n)$:$(1,1)$,$(2,1)$,$(2,2)$,$(2,3)$,$(3,3)$,$(3,4)$,$(4,4)$。 乐队的其他成员(Pink Floyd)希望 Waters 无法完成他的行走,因此趁他不注意时,他们会将网格中的至多两个格子的值反转($0$ 变为 $1$,$1$ 变为 $0$)。他们担心自己动作不够快,因此请你帮忙选择要反转的格子。注意,你不能反转 $(1,1)$ 和 $(n,n)$ 这两个格子。 可以证明,对于给定的约束条件,总是存在解。 还要注意,Waters 会在乐队更改网格之后才选择他的行走数字,因此无论他选择哪个数字,都不能让他从 $(1,1)$ 走到 $(n,n)$。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 50$)。每个测试用例的描述如下。 每个测试用例的第一行包含一个整数 $n$($3 \le n \le 200$)。 接下来的 $n$ 行,每行包含一个二进制网格,$(1,1)$ 位置用 'S' 表示,$(n,n)$ 位置用 'F' 表示。 所有测试用例中 $n$ 的总和不超过 $200$。

输出格式

对于每个测试用例,第一行输出一个整数 $c$($0 \le c \le 2$),表示反转的格子数。 接下来的 $c$ 行中,第 $i$ 行输出你反转的第 $i$ 个格子的坐标。你不能对同一个格子反转两次。注意,你不能反转 $(1,1)$ 和 $(n,n)$ 这两个格子。

说明/提示

对于第一个测试用例,反转一个格子后,得到如下网格: ``` S010 0001 1001 111F ``` 由 ChatGPT 4.1 翻译