CF329A Purification

题目描述

你是一名冒险者,正在一座邪恶神庙中冒险。在击败了几只弱小的僵尸后,你来到一个由 $n \times n$ 的方形地砖组成的房间。行号从上到下为 $1$ 到 $n$,列号从左到右为 $1$ 到 $n$。在房间的远端,有一道被邪恶魔法封印的门。门上刻着如下铭文: 净化所有的邪恶,才能唤醒大门! 作为一名经验丰富的冒险者,你立刻明白了这句话的含义。你注意到网格里的每一个格子最初都是邪恶的。你需要净化所有这些格子。 你唯一会的地砖净化方法就是施放“净化”魔法。你每次在一个格子上施法后,在该格子所在的整行和整列的所有格子(包括施法的格子)都会被净化!一个格子可以被多次净化。 你希望用最少的“净化”魔法次数来净化所有 $n \times n$ 个格子。不过,这并没有你想象得那么简单——因为你发现有些格子比其它格子更加邪恶。你不能在这些格子上施放“净化”魔法,哪怕它们已经被净化了也不行。但若与这些格子同一行或同一列的其它格子被施法,这些更加邪恶的格子也会被净化。 请你用最少的魔法次数净化所有格子。如果无法净化全部格子,输出 $-1$。

输入格式

第一行包含一个整数 $n$($1\leq n\leq 100$)。接下来的 $n$ 行,每行包含 $n$ 个字符。第 $i$ 行第 $j$ 个字符表示网格第 $i$ 行第 $j$ 列的格子。如果为 'E',表示这个格子更加邪恶,不能在这里施法;如果为 '.',表示普通格子。

输出格式

如果存在一种方式能够净化所有格子,输出若干行。第一行为一个整数 $x$,表示你至少需要施放 $x$ 次“净化”魔法。接下来的 $x$ 行,每行包含两个整数,表示你应当在哪一行哪一列的格子上施法。 如果无法净化所有格子,输出 $-1$。

说明/提示

第一个样例可以用下图说明。紫色格子为尚未净化的邪恶格子,红色格子为当前施法的格子,黄色格子为因本次施法被净化的格子,绿色格子为之前已经被净化的格子。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF329A/04b73f6bd6d4f5c1ba16b8072ebad28ccdfa62cc.png) 第二个样例中,对于第 $1$ 行第 $1$ 列的格子无法净化。 对于第三个样例: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF329A/8ffcc7f3e4ed4b4242d89f880e88ffce0ed4e4ab.png) 由 ChatGPT 5 翻译