我们的 Battlestarcraft Algorithmica 飞船正在太空中被一群穷追不舍的机器人“Pylons”追赶!我们刚刚传送到了一个新的星系,试图甩掉它们。我们希望在这里尽可能多地停留,以便争取时间规划下一步行动……但我们不想被抓住!
这个星系是一个 $R$ 行 $C$ 列的平面网格;行从上到下编号为 $1$ 到 $R$,列从左到右编号为 $1$ 到 $C$。我们可以选择起始单元格,并且必须不断在单元格之间跳跃,直到访问过星系中的每个单元格恰好一次。也就是说,我们不能重复访问任何单元格,包括起始单元格。
我们不想让 Pylons 太容易猜到我们的下一步去向。每次从当前单元格跳跃时,我们必须选择一个与当前单元格不在同一行、同一列或同一对角线上的目标单元格。设 $(i, j)$ 表示第 $i$ 行第 $j$ 列的单元格;那么从当前单元格 $(r, c)$ 到目标单元格 $(r', c')$ 的跳跃是无效的,当且仅当以下任一条件成立:
- $r = r'$
- $c = c'$
- $r - c = r' - c'$
- $r + c = r' + c'$
你能帮我们找到一种访问所有 $R \times C$ 个单元格的顺序,使得序列中任意一对连续单元格之间的移动都是有效的吗?或者我们根本无法从 Pylons 手中逃脱?
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例包含一行,包含两个整数 $R$ 和 $C$:该星系的行数和列数。
输出格式
对于每个测试用例,输出一行 Case #x: y,其中 $y$ 是一个大写字母字符串:POSSIBLE 或 IMPOSSIBLE,取决于是否可能满足题目描述中的条件。如果可能,接着输出 $R \times C$ 行。这些行中的第 $i$ 行表示你将访问的第 $i$ 个单元格(从 $1$ 开始计数),应包含两个整数 $r_i$ 和 $c_i$:该单元格的行号和列号。注意,这些行中的第一行代表你选择的起始单元格。
数据范围
每个测试集的时限:20 秒。 内存限制:1GB。
测试集 1 (可见)
$T = 16$。 $2 \le R \le 5$。 $2 \le C \le 5$。
测试集 2 (隐藏)
$1 \le T \le 100$。 $2 \le R \le 20$。 $2 \le C \le 20$。
样例
样例输入 1
2 2 2 2 5
样例输出 1
Case #1: IMPOSSIBLE Case #2: POSSIBLE 2 3 1 1 2 4 1 2 2 5 1 3 2 1 1 5 2 2 1 4
说明
在样例 1 中,无论我们选择哪个起始单元格,都没有地方可以跳跃,因为所有剩余的单元格都与我们的起始单元格共享同一行、同一列或同一对角线。
在样例 2 中,我们选择了第 2 行第 3 列的单元格作为起始单元格。请注意,我们的最后一个单元格与起始单元格共享同一行、同一列或同一对角线是可以的。下图显示了访问单元格的顺序:
2 4 6 10 8 7 9 1 3 5