#abc308d. [abc308_d]Snuke Maze

[abc308_d]Snuke Maze

問題文

HHWW 列のグリッドがあります。 以下、上から ii 行目、左から jj 列目のマスを (i,j)(i,j) と表記します。 グリッドの各マスには英小文字が書かれており、(i,j)(i,j) に書かれた文字は与えられる文字列 SiS_ijj 文字目と一致します。

すぬけくんは、辺で隣接するマスに移動することを繰り返して (1,1)(1,1) から (H,W)(H,W) まで移動しようと思っています。 訪れるマス (最初の (1,1)(1,1) と 最後の (H,W)(H,W) を含む)に書かれた文字が、 訪れる順に s rightarrow\\rightarrow n rightarrow\\rightarrow u rightarrow\\rightarrow k rightarrow\\rightarrow e rightarrow\\rightarrow s rightarrow\\rightarrow n rightarrowdots\\rightarrow \\dots となるような経路が存在するか判定してください。 なお、22 つのマス (i1,j1),(i2,j2)(i_1,j_1),(i_2,j_2)i1i2+j1j2=1|i_1-i_2|+|j_1-j_2| = 1 を満たすとき、またそのときに限り「辺で隣接する」といいます。

より厳密には、マスの列 ((i1,j1),(i2,j2),dots,(ik,jk))((i_1,j_1),(i_2,j_2),\\dots,(i_k,j_k)) であって以下の条件を全て満たすものが存在するか判定してください。

  • (i1,j1)=(1,1),(ik,jk)=(H,W)(i_1,j_1) = (1,1),(i_k,j_k) = (H,W)
  • すべての t(1leqt<k)t\\ (1 \\leq t < k) について、(it,jt)(i_t,j_t)(it+1,jt+1)(i_{t+1},j_{t+1}) は辺で隣接する
  • すべての t(1leqtleqk)t\\ (1 \\leq t \\leq k) について、(it,jt)(i_t,j_t) に書かれた文字は snuke((t1)bmod5)+1((t-1) \\bmod 5) + 1 文字目と一致する

制約

  • 2leqH,Wleq5002\\leq H,W \\leq 500
  • H,WH,W は整数
  • SiS_i は英小文字からなる長さ WW の文字列

入力

入力は以下の形式で標準入力から与えられる。

HH WW S1S_1 S2S_2 vdots\\vdots SHS_H

出力

問題文中の条件を満たす経路が存在するならば Yes を、存在しないならば No を出力せよ。


入力例 1

2 3
sns
euk

出力例 1

Yes

$(1,1) \\rightarrow (1,2) \\rightarrow (2,2) \\rightarrow (2,3)$ という経路は、訪れたマスに書かれた文字が訪れた順に s rightarrow\\rightarrow n rightarrow\\rightarrow u rightarrow\\rightarrow k となるため条件を満たします。


入力例 2

2 2
ab
cd

出力例 2

No

入力例 3

5 7
skunsek
nukesnu
ukeseku
nsnnesn
uekukku

出力例 3

Yes