#pragma GCC target("avx2") #pragma GCC optimize("03") #pragma GCC optimize("unroll-loops") #include using namespace std; typedef long double ld; typedef long long ll; typedef unsigned long long ull; #define endl "\n" #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define rep(i,n) for(int i=0;i<(n);i++) #define PII pair #define PLL pair #define ALL(x) (x).begin(), (x).end() constexpr int INF=1<<30; constexpr ll LINF=1LL<<60; constexpr ll mod=1e9+7; constexpr int NIL = -1; templatevector vec(int len, T elem) { return vector(len, elem); } // auto dp = vec(52, vec(103, vec(103, INF))); templateinline bool chmax(T &a, const T &b) { if (ainline bool chmin(T &a, const T &b) { if (binline int popcount(T a) {return __builtin_popcount(a);} templateinline T emod(T a, T p) { return (a%p + p) % p;} //------------------- vector> visited(55, vector(55, false)); int h, w; int dx[4] = {1, 0, -1, 0}; int dy[4] = {0, 1, 0, -1}; void bfs(int y, int x, vector &B) { queue q; q.push({y, x}); auto onfield = [&](int yy, int xx) { bool ans = true; if(0 > yy or yy >= h) ans = false; if(0 > xx or xx >= w) ans = false; // cout << (ans? "Y":"N") << endl; return ans; }; while(!q.empty()) { auto [y, x] = q.front(); q.pop(); // cout << y << " " << x << endl; if(!visited[y][x]) { // cout << "OK"; visited[y][x] = true; rep(i, 4) { int ny = y + dy[i]; int nx = x + dx[i]; // cout < 0) { q.push({ny, nx}); } } } } } int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(15); cin >> h >> w; int s[2]; int g[2]; cin >> s[0] >> s[1] >> g[0] >> g[1]; s[0]--; s[1]--; g[0]--; g[1]--; vector B(h); rep(i, h) cin >> B[i]; bfs(s[0], s[1], B); // rep(i, h) rep(j, w) cout << (visited[i][j]? 1:0 )<< endl; if(visited[g[0]][g[1]]) cout << "YES" << endl; else cout << "NO" << endl; return 0; }