#include #include using namespace std; using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A &a, const B &b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A &a, const B &b) { if (a > b) { a = b; return true; } return false; } const int dx4[4] = { 1, 0, -1, 0 }; const int dy4[4] = { 0, -1, 0, 1 }; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int h, w; cin >> h >> w; int sx, sy, gx, gy; cin >> sx >> sy >> gx >> gy; sx--, sy--, gx--, gy--; vectors(h); rep(i, h)cin >> s[i]; dsu uf(h * w); rep(i, h)rep(j, w) { rep(t, 4) { int ni = i + dx4[t]; int nj = j + dy4[t]; if (ni < 0 || ni >= h)continue; if (nj < 0 || nj >= w)continue; int n0 = s[i][j] - '0'; int n1 = s[ni][nj] - '0'; if (abs(n0 - n1) <= 1) { uf.merge(i * w + j, ni*w + nj); } int ni2 = ni + dx4[t]; int nj2 = nj + dy4[t]; if (ni2 < 0 || ni2 >= h)continue; if (nj2 < 0 || nj2 >= w)continue; int n2 = s[ni2][nj2] - '0'; if (n0 == n2 && n0 > n1) { uf.merge(i * w + j, ni2*w + nj2); } } } int x = sx * w + sy; int y = gx * w + gy; if (uf.same(x, y))cout << "YES" << endl; else cout << "NO" << endl; return 0; }