宝石路径
题号:NC21355
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

给你一个n*m的棋盘,有宝石的格子为'#',空格子为'.'

问你是否存在一条简单路径从某个宝石出发,到某个宝石结束,而且恰好经过每个宝石一次
而且假设经过的宝石的位置依次为S[0],S[1],...
对于所有偶数的i,S[i],S[i+1]在同一行
对于所有奇数的i, S[i],S[i+1]在同一列

如果存在这样的路径,输出YES 否则输出"NO"

输入描述:

第一行输入两个整数n,m (1 ≤ n, m ≤ 50)
接下来n行每行输入m个字符描述棋盘

输出描述:

输出"YES" 或者"NO"
示例1

输入

复制
2 2
##
.#

输出

复制
YES
示例2

输入

复制
2 2
#.
.#

输出

复制
NO
示例3

输入

复制
3 2
##
##
##

输出

复制
YES
示例4

输入

复制
3 3
###
###
###

输出

复制
NO
示例5

输入

复制
5 3
###
..#
###
#..
###

输出

复制
NO
示例6

输入

复制
12 16
................
.######..######.
.######..######.
.##......##..##.
.##......##..##.
.######..######.
.######..######.
.....##..##..##.
.....##..##..##.
.######..######.
.######..######.
................

输出

复制
YES
示例7

输入

复制
1 1
#

输出

复制
YES

备注:

子任务1: n*m <= 100
子任务2: n*m <= 1000
子任务3: 无限制