#P15924. [Roi2019 Team]Factory工厂

[Roi2019 Team]Factory工厂

题目描述

城郊的一座军工厂被怀疑与近期一系列犯罪有关。公安局派出 Akane 检查这座工厂。

Akane 有一张工厂的矩形地图,大小为 m×nm\times n。每个格子要么为空,要么是工厂车间的一部分。所有车间格子保证边连通,也就是说,可以从任意车间格子只经过共享边的车间格子到达任意其他车间格子。

还保证工厂不会包围任何非工厂区域:从任意非车间格子出发,都可以只经过非车间格子到达地图边界。

Akane 认为线索更可能出现在某个车间的角落,而不是车间中心。考虑所有位于至少一个车间格子角上的网格点,Akane 称这些点为重要点。重要点数不超过 (m+1)(n+1)(m+1)(n+1)

Akane 还发现,每个车间格子的边界上都有走廊,连接该车间四个角上的相邻网格点。

Akane 想高效地遍历所有重要点。更具体地,她想找到一条沿网格点行走的路线,满足:

  1. 路线起点和终点相同;
  2. 每两个相邻点之间走过一条走廊;
  3. 每个重要点至少被访问一次;
  4. 路线只经过重要点;
  5. 每条走廊至多经过一次。

请帮助 Akane 找到任意一条合法路线,或判断不存在。

输入格式

第一行包含两个整数 m,nm,n,表示地图大小。

接下来 mm 行,每行 nn 个字符,描述地图:

  • * 表示车间;
  • . 表示空格子。

输出格式

若不存在合法路线,输出:

No

否则输出:

Yes

然后输出一个整数 LL,表示 Akane 将经过的走廊数量。

随后输出路线本身,每行一个网格点。水平网格线从上到下编号为 00mm,竖直网格线从左到右编号为 00nn。一个网格点用两个整数 ri,cir_i,c_i 表示。

数据范围

  • 1m,n201 \le m,n \le 20

样例 1 输入

3 3
***
***
.**

样例 1 输出

Yes
16
0 0
0 1
1 1
1 2
1 3
0 3
0 2
1 2
2 2
2 3
3 3
3 2
3 1
2 1
2 0
1 0

样例 2 输入

1 4
****

样例 2 输出

Yes
10
0 0
0 1
0 2
0 3
0 4
1 4
1 3
1 2
1 1
1 0

样例 3 输入

2 2
**
**

样例 3 输出

No