#P5458. Crosswords

Crosswords

题目描述

像所有的奶牛一样,奶牛贝西喜欢解决填字游戏。不幸的是,她的妹妹埃尔西把牛奶洒在了她的书上填字游戏,涂污文字,让她看不清每个线索的起点。帮助贝西康复是你的工作线索编号!

一个未标记的纵横字谜以N×{N×} M{M}(3<=N<={(3 <= N <=}50,3<=M<=50{50, 3 <= M <= 50}网格的形式给出某些单元格将。是透明的(通常为白色)一些细胞会被阻塞(通常为黑色)。鉴于此布 局、线索编号是一个简单的过程,遵循两个逻辑步骤:

步骤1{1:}我们确定每个单元格是从水平还是垂直方向开始线索如果一个细胞开始一个水平线索,它必须是清晰的,网格,其右侧的两个单元格必须清晰(即水平线索只能表示一个包含3{3}个或更多字符 的单词)。细胞开始垂直线索的规则是类似的:细胞上面的单元格必须被阻塞或在网格之外,下面的两个单元格必须清楚。

第二步:我们给每个开始线索的细胞分配一个数字。单元格是按顺序从1{1}开始赋值你会读一本书;第一行中的单元格是从从左到右,然后是第二行,等等。只有细胞开始线索是分配的数字。

例如,考虑网格,其中".{.}"表示一个透明单元格,并且"#{\#}"阻塞的单元格。



...
#..
...
..#
.##

可以开始水平或垂直线索的单元格标记为!如下


!!!
#..
!..
..#
.##

如果我们给这些单元格赋值,我们得到以下结果:


123
#..
4.
..#
.##

注意,输入数据中描述的纵横字谜可能不满足通常在已发布的纵横字谜中看到的约束。例如,一些透明细胞可能不是任何线索的一部分。

输入格式

第一行输入包含由空格分隔的N{N}M{M}。接下来的N{N}行输入分别描述了网格的一行。每个包含M{M}个字符,可以是".{.}"(透明单元格)或"#{\#}"(a{a}阻塞的单元格)。

输出格式

在输出的第一行,打印线索数。在剩下的每一行上,打印给出单一线索的位置(按上述顺序排列)。左上角单元格具有位置1{(1,}1{1)}。右下角单元格具有位置(N{N,}M{M)}

样例

输入样例

5 3
...
#..
...
..#
.##

输出样例

4
1 1
1 2
1 3
3 1