编程题
### 问题描述
小齐喜欢解纵横字谜,但不幸的是,她的妹妹小王在纸上撒了一些牛奶,弄脏了她的纵横字谜书。牛奶弄花了纸上的文字,使得小齐很难看清每个提示的起始位置。现在你的任务是帮助小齐找回提示的编号。
你会得到一个未标注的纵横字谜,表示为一个 $N \times M$ 的网格。一些单元格将是明显的(通常是白色),而另一些将是阻塞的(通常是黑色)。在这种布局的情况下,提示编号是一个简单的过程,其中包括两个逻辑步骤:
第一步:我们确定每个单元格是否是水平或垂直提示的起始位置。如果一个单元格是水平提示的起始位置,它必须是明显的,其左边的相邻单元格必须是阻塞的或位于纵横字谜网格外部,并且其右边的两个单元格必须是明显的(也就是说,水平提示只能表示一个长度为 $3$ 或更长的单词)。单元格开始垂直提示的规则类似:上面的单元格必须是阻塞的或位于网格外部,下面的两个单元格必须是明显的。
第二步:我们为每个提示的起始单元格分配一个编号。单元格按照阅读书籍的顺序按顺序编号,从左到右逐行编号,然后是第二行,依此类推。只有提示的起始单元格被分配编号。
请注意,输入数据中描述的纵横字谜可能不满足通常在已发布的纵横字谜中看到的约束。
### 输入格式
第 $1$ 行:两个整数 $N$ 和 $Q$。
第一行包含由空格分隔的正整数 $N$ 和 $M$。
接下来的 $N$ 行输入中的每一行都描述了网格的一行。每行包含 $M$ 个字符,这些字符可以是 $.$ (明显的单元格)或 #(阻塞的单元格)。
### 输出格式
输出一个整数,表示小齐和艾尔希共同到达谷仓所需的最小能量。在给定示例中,小齐从 $1$ 到 $4$,艾尔希从 $2$ 到 $3$ 再到 $4$,然后,她们一起从 $4$ 到 $7$ 再到 $8$。
### 样例输入
```
5 3
...
#..
...
..#
.##
```
### 样例输出
```
4
1 1
1 2
1 3
3 1
```
### 评测数据规模
$3 \leq N \leq 50,3 \leq M \leq 50$。