1 | #include<bits/stdc++.h> |
2 | using namespace std; |
3 | const int N=510; |
4 | int H,W; |
5 | char mp[N][N]; |
6 | int vis[N][N]; |
7 | int dx[4]={1,-1,0,0}; |
8 | int dy[4]={0,0,1,-1}; |
9 | bool flag=1; |
10 | void dfs(int x,int y,char now_char) |
11 | { |
12 | if(!flag) |
13 | { |
14 | return; |
15 | } |
16 | if(x==H&&y==W) |
17 | { |
18 | cout<<"Yes"; |
19 | flag=0; |
20 | return; |
21 | } |
22 | if(now_char=='s') |
23 | { |
24 | now_char='n'; |
25 | } |
26 | else if(now_char=='n') |
27 | { |
28 | now_char='u'; |
29 | } |
30 | else if(now_char=='u') |
31 | { |
32 | now_char='k'; |
33 | } |
34 | else if(now_char=='k') |
35 | { |
36 | now_char='e'; |
37 | } |
38 | else if(now_char=='e') |
39 | { |
40 | now_char='s'; |
41 | } |
42 | else |
43 | { |
44 | return; |
45 | } |
46 | for(int i=0;i<4;i++) |
47 | { |
48 | int xx=x+dx[i]; |
49 | int yy=y+dy[i]; |
50 | if(xx>0&&yy>0&&xx<=H&&yy<=W&&mp[xx][yy]==now_char&&vis[xx][yy]==0) |
51 | { |
52 | vis[xx][yy]=1; |
53 | dfs(xx,yy,now_char); |
54 | vis[xx][yy]=0; |
55 | } |
56 | } |
57 | } |
58 | int main() |
59 | { |
60 | cin>>H>>W; |
61 | for(int i=1;i<=H;i++) |
62 | { |
63 | for(int j=1;j<=W;j++) |
64 | { |
65 | cin>>mp[i][j]; |
66 | } |
67 | } |
68 | if(mp[1][1]!='s') |
69 | { |
70 | cout<<"No"; |
71 | return 0; |
72 | } |
73 | dfs(1,1,mp[1][1]); |
74 | if(flag) |
75 | { |
76 | cout<<"No"; |
77 | } |
78 | return 0; |
79 | } |