#include using namespace std; #define REP(i,n) for(int i=0;i ostream& operator<<(ostream& os,const vector& vec){ os << "["; for(const auto& v : vec){ os << v << ","; } os << "]"; return os; } typedef long long ll; typedef unsigned long long ull; typedef pair pii; typedef vector vi; typedef vector vvi; bool vis[64][64]; int maze[64][64]; int h,w; const int dx[]={0,1,0,-1} , dy[]={1,0,-1,0}; bool ok(int x,int y){ return (x>=0 and x=0 and y>h>>w; int sx,sy,gx,gy; cin>>sx>>sy>>gx>>gy; sx--; sy--; gx--; gy--; rep(i,h){ string s;cin>>s; for(int j=0;j que; que.push(pii(sx,sy)); while(!que.empty()){ auto p = que.front(); que.pop(); int x = p.first; int y = p.second; // cout << "pop : (" << x << "," << y << ")" << endl; if(x==gx and y==gy){ cout << "YES" << endl; return 0; } for(int i=0;i<4;i++){ int nx=x+dx[i]; int ny=y+dy[i]; if(!ok(nx,ny)) continue; if(vis[nx][ny]) continue; if(abs(maze[nx][ny]-maze[x][y])<=1){ vis[nx][ny]=true; // cout << "push: (" << nx << "," << ny << ")" << endl; que.push(pii(nx,ny)); } } for(int i=0;i<4;i++){ int nx=x+2*dx[i]; int ny=y+2*dy[i]; if(!ok(nx,ny)) continue; if(vis[nx][ny]) continue; if(maze[nx][ny]==maze[x][y] and maze[x+dx[i]][y+dy[i]]