#include #define rep(i,n) for (int i = 0; i < (int)(n); i ++) #define irep(i,n) for (int i = (int)(n) - 1;i >= 0;--i) using namespace std; using ll = long long; using PL = pair; using P = pair; constexpr int INF = 1000000000; constexpr long long HINF = 1000000000000000; constexpr long long MOD = 1000000007;// = 998244353; constexpr double EPS = 1e-4; constexpr double PI = 3.14159265358979; const int dy[4] = {-1,0,1,0}; const int dx[4] = {0,1,0,-1}; int N = 2510; vector> G(N); vector visited(N,0); void dfs(int v) { for (int e:G[v]) { if (visited[e]) continue; visited[e] = 1; dfs(e); } } int main() { int H,W; cin >> H >> W; N = H*W; int sx,sy,gx,gy; cin >> sy >> sx >> gy >> gx; --sy; --sx; --gy; --gx; vector> grid(H,vector(W)); rep(i,H) { string x; cin >> x; rep(j,W) { grid[i][j] = x[j] - '0'; } } rep(i,H)rep(j,W) { rep(k,4) { int y = i + dy[k],x = j + dx[k]; if (y < 0 || y >= H || x < 0 || x >= W) continue; if (abs(grid[i][j] - grid[y][x]) <= 1) G[i*W + j].push_back(y*W + x); } rep(k,4) { int y = i + 2*dy[k],x = j + 2*dx[k]; int my = i + dy[k],mx = j + dx[k]; if (y < 0 || y >= H || x < 0 || x >= W) continue; if (grid[i][j] == grid[y][x] && grid[my][mx] < grid[i][j]) G[i*W + j].push_back(y*W + x); } } visited[sy * W + sx] = 1; dfs(sy * W + sx); if (visited[gy * W + gx]) cout << "YES" << '\n'; else cout << "NO" << '\n'; return 0; }