网格树
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

噢!往日再现!

Capps 有一个 n\times m 大小的网格。a_{i, j} 描述此网格从上往下数第 i 行、从左往右数第 j 列的单元格,若 a_{i, j} = . ,则该单元格为空,而若 a_{i, j} = W,则该单元格为墙。初始时网格的每个单元均为空。

Capps 对树情有独钟,他希望可以通过对初始网格执行以下操作若干次,使得网格变成网格树

  •  选择一个数对 (i,j) 满足 a_{i, j} = .,将 a_{i, j} 赋值为 W,即 a_{i, j} ← W

Capps 觉得这并不难,于是 Capps 问你,如何使用最少的操作次数使得初始网格变成网格树

网格树:如果网格中任意两个空单元格 u,v (u \neq v)之间均存在且仅存在一条不经过墙的简单路径使得 u 能到达 v,则称此网格为网格树。

简单路径:从任意起点出发,每次只走上下左右四个方向之一(不允许斜着走)的一条路径,此路径终点任意且不允许经过同一个点超过一次。

输入描述:

一行两个正整数 n,m (1\le n \times m \le 25)

输出描述:

输出 n 行,每行一个长度为 m 的字符串 a_i,以此表示经过最少操作次数可以变成的网格树。如果有多种答案,输出任意一种均可
示例1

输入

复制
3 3

输出

复制
...
W.W
...

说明

对于此样例,只需输出的结果同时满足

1. 有两个W。
2. 是网格树

均可认为输出正确。