#CF2045M. 镜子迷宫

镜子迷宫

M. 镜子迷宫
每个测试点时间限制:11
每个测试点内存限制:10241024 兆字节

给定一个 RR 行(从北到南编号 11RR)和 CC 列(从西到东编号 11CC)的网格。每个格子是相同大小的正方形。位于第 rr 行第 cc 列的格子记为 (r,c)(r,c)。每个格子可以是空的,也可以在格子的一条对角线上放置一面镜子。镜子用一条线段表示。如果镜子位于从西南角到东北角的对角线上,则称为类型 11;如果位于另一条对角线上,则称为类型 22

这些镜子遵循反射定律,即入射角等于反射角。具体地,对于类型 11 镜子,如果光束从北、南、西、东方向进入格子,则它将被分别反射到西、东、北、南方向。类似地,对于类型 22 镜子,如果光束从北、南、西、东方向进入格子,则它将被分别反射到东、西、南、北方向。

你想要从网格外部放置一个激光器,使得所有镜子都被激光束击中。共有 2(R+C)2\cdot(R+C) 个可能的位置:

  • 从网格北侧,第 cc 列,向南发射激光束,其中 1cC1 \le c \le C
  • 从网格南侧,第 cc 列,向北发射激光束,其中 1cC1 \le c \le C
  • 从网格东侧,第 rr 行,向西发射激光束,其中 1rR1 \le r \le R
  • 从网格西侧,第 rr 行,向东发射激光束,其中 1rR1 \le r \le R

确定所有可能的激光器位置,使得所有镜子都被激光束击中。

输入
第一行包含两个整数 RRCC1R,C2001 \le R, C \le 200)。
接下来 RR 行,每行一个长度为 CC 的字符串 SrS_r。字符串 SrS_r 的第 cc 个字符表示格子 (r,c)(r,c)。每个字符可以是 .(空单元格)、/(类型 11 镜子)或 \(类型 22 镜子)。网格中至少有一面镜子。

输出
输出一个整数,表示可能的激光器位置的数量,记作 kk
如果 k>0k > 0,则接下来输出 kk 个空格分隔的字符串,每个字符串表示一个激光器位置。字符串由一个字符后紧跟一个整数组成,字符表示网格的边:N(北)、S(南)、E(东)或 W(西),整数表示行号或列号。你可以按任意顺序输出这些字符串。

样例

输入

4 4
.//.
.\\.
.\/.
....

输出

2
N3 W2

输入

4 6
./..\.
.\...\
./../\
......

输出

2
E3 S2

输入

4 4
....
./\.
.\/.
....

输出

0

样例解释

对于样例 #1:下图展示了其中一个解。
对于样例 #2:下图展示了其中一个解。