#include using namespace std; typedef long long ll; ll n,m,mp[109][109]; ll sx,sy,gx,gy; ll dx[4]= {1,-1,0,0}; ll dy[4]= {0,0,1,-1}; bool vis[109][109]; struct _NODE { ll x,y; }; queue<_NODE> qe; signed main() { scanf("%lld %lld %lld %lld %lld %lld",&n,&m,&sx,&sy,&gx,&gy); memset(vis,false,sizeof(vis)); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { char ch; cin>>ch; mp[i][j]=ch-'0'; } qe.push((_NODE) { sx,sy }); vis[sx][sy]=true; while(!qe.empty()) { _NODE nw=qe.front(); qe.pop(); ll nwx=nw.x,nwy=nw.y; if(nwx==gx&&nwy==gy) { printf("YES\n"); return 0; } for(int k=0; k<4; k++) { _NODE to=(_NODE) { nwx+dx[k],nwy+dy[k] }; if(to.x<1||to.x>n&&to.y<1||to.y>m||vis[to.x][to.y]||(abs(mp[to.x][to.y]-mp[nwx][nwy])!=1&&mp[to.x][to.y]!=mp[nwx][nwy])) ; else { qe.push(to); vis[to.x][to.y]=true; } to=(_NODE) { to.x+dx[k],to.y+dy[k] }; if(to.x<1||to.x>n&&to.y<1||to.y>m||vis[to.x][to.y]||mp[to.x-dx[k]][to.y-dy[k]]>=mp[nwx][nwy]||mp[to.x][to.y]!=mp[nwx][nwy]) continue; qe.push(to); vis[to.x][to.y]=true; } } printf("NO\n"); return 0; }