题目描述
有一个 H 行 W 列的网格。以下将从上到下第 i 行、从左到右第 j 列的格子记作 (i,j)。网格的每个格子上都写有一个小写英文字母,(i,j) 上写的字母等于给定字符串 Si 的第 j 个字符。
すぬけ君想要通过不断移动到边上相邻的格子,从 (1,1) 走到 (H,W)。他希望所经过的格子(包括起点 (1,1) 和终点 (H,W))上写的字母,按照经过的顺序依次为 s → n → u → k → e → s → n →…,即不断循环 snuke 这五个字母。请判断是否存在这样的一条路径。
这里,两个格子 (i1,j1) 和 (i2,j2) 当且仅当 ∣i1−i2∣+∣j1−j2∣=1 时,称为“边上相邻”。
更严格地说,请判断是否存在一个格子序列 ((i1,j1),(i2,j2),…,(ik,jk)),满足以下所有条件:
- (i1,j1)=(1,1), (ik,jk)=(H,W)
- 对所有 t (1≤t<k),(it,jt) 和 (it+1,jt+1) 边上相邻
- 对所有 t (1≤t≤k),(it,jt) 上写的字母等于
snuke 的第 ((t−1)mod5)+1 个字母
输入格式
输入按以下格式从标准输入读入。
H W
S1
S2
⋮
SH
输出格式
如果存在满足题意的路径,输出 Yes;否则输出 No。
样例 1
输入
2 3
sns
euk
输出
Yes
样例 2
输入
2 2
ab
cd
输出
No
样例 3
输入
5 7
skunsek
nukesnu
ukeseku
nsnnesn
uekukku
输出
Yes
说明/提示
限制
- 2≤H,W≤500
- H,W 为整数
- Si 是由小写英文字母组成的长度为 W 的字符串
样例解释 1
路径 $(1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 3)$,经过的格子上的字母依次为 s → n → u → k,满足条件。
由 ChatGPT 4.1 翻译