CF1421B.Putting Bricks in the Wall

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Putting Bricks in the Wall

题目描述

Pink Floyd 正在对 Roger Waters 开一个玩笑。他们知道他不喜欢墙(walls),他想要自由地行走,所以他们正在阻止他离开他的房间,这个房间可以看作是一个网格。

Roger Waters 有一个 n×nn \times n 的正方形网格,他想从左上角(1,11,1)走到右下角(n,nn,n)。Waters 可以从一个格子移动到与其相邻的任意一个格子(仅限于四个方向),只要他还在网格内。此外,除了格子 (1,1)(1,1)(n,n)(n,n) 以外,每个格子里都有一个 0011

在开始行走前,他会选择 0011 中的一个数字,并且只能走到值等于他所选数字的格子。起点 (1,1)(1,1) 和终点 (n,n)(n,n) 不受此规则限制,他可以无论选择哪个数字都经过这两个格子。因此,格子 (1,1)(1,1) 的值用字母 'S' 表示,格子 (n,n)(n,n) 的值用字母 'F' 表示。

例如,在第一个样例测试中,他可以沿着以下路径只经过值为 00 的格子,从 (1,1)(1,1) 走到 (n,n)(n,n)(1,1)(1,1)(2,1)(2,1)(2,2)(2,2)(2,3)(2,3)(3,3)(3,3)(3,4)(3,4)(4,4)(4,4)

乐队的其他成员(Pink Floyd)希望 Waters 无法完成他的行走,因此趁他不注意时,他们会将网格中的至多两个格子的值反转(00 变为 1111 变为 00)。他们担心自己动作不够快,因此请你帮忙选择要反转的格子。注意,你不能反转 (1,1)(1,1)(n,n)(n,n) 这两个格子。

可以证明,对于给定的约束条件,总是存在解。

还要注意,Waters 会在乐队更改网格之后才选择他的行走数字,因此无论他选择哪个数字,都不能让他从 (1,1)(1,1) 走到 (n,n)(n,n)

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 tt1t501 \le t \le 50)。每个测试用例的描述如下。

每个测试用例的第一行包含一个整数 nn3n2003 \le n \le 200)。

接下来的 nn 行,每行包含一个二进制网格,(1,1)(1,1) 位置用 'S' 表示,(n,n)(n,n) 位置用 'F' 表示。

所有测试用例中 nn 的总和不超过 200200

输出格式

对于每个测试用例,第一行输出一个整数 cc0c20 \le c \le 2),表示反转的格子数。

接下来的 cc 行中,第 ii 行输出你反转的第 ii 个格子的坐标。你不能对同一个格子反转两次。注意,你不能反转 (1,1)(1,1)(n,n)(n,n) 这两个格子。

说明/提示

对于第一个测试用例,反转一个格子后,得到如下网格:

S010
0001
1001
111F

由 ChatGPT 4.1 翻译

样例

3
4
S010
0001
1000
111F
3
S10
101
01F
5
S0101
00000
01111
11111
0001F
1
3 4
2
1 2
2 1
0

在线编程 IDE

建议全屏模式获得最佳体验