1930. 图形拼接 标准IO
时间限制:1000 MS 内存限制:64 MB    算法评级:    状态:

    小火龙找到了两块相同的拼图,可以用 $n \times m$ 的字符网格描述两块拼图,其中字符 'X' 表示拼图的一部分,而 '.' 表示网格的空白部分,不是拼图的部分。保证拼图块是一个连接的块。小火龙无法旋转或翻转拼图,他只能向任何方向平移它们。拼图之间也不能重叠。 
    现在需要你来确定是否可以根据给定输入的两个相同的拼图拼成一个矩形。矩形应该是实心的,即在矩形内部或其边界上不应有空洞。


输入格式

输入的第一行将包含两个整数 $n$ 和 $m$($1 \leq n,m \leq 500$),是网格的尺寸。 
接下来的 $n$ 行将描述这个网格。每行的长度为 $m$,由字符 '.' 和 'X' 组成, 'X' 对应于拼图块的一部分。 '.' 是一个空的空间。 
确保输入中至少有一个 'X' 字符,并 'X' 字符形成一个连接区域。 


输出格式

如果可以拼成一个矩形,则输出“YES”。 否则输出“NO”。


样例输入

2 3
XXX
XXX

样例输出

YES

样例输入2

2 2
.X
XX

样例输出2

NO

样例输入3

5 5
.....
..X..
.....
.....
.....

样例输出3

YES

提示

子任务一:$30$分,满足 $1 \leq n,m \leq 10$;

子任务二:$30$分,满足 $1 \leq n,m \leq 100$;

子任务三:$40$分,满足 $1 \leq n,m \leq 500$。

 

对于第一个样本,我们可以形成的矩形示例如下 :

XXXXXX

XXXXXX

XXX

XXX

XXX

XXX

 

对于第二个样本,不可能在不旋转或翻转的情况下形成矩形。

对于第三个样本,我们可以形成的矩形示例如下 :

XX

X

X

代码运行状态:

输出