#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int dy[] = {-1, 1, 0, 0}; const int dx[] = {0, 0, -1, 1}; int main() { int h, w, sy, sx, gy, gx; cin >> h >> w >> sy >> sx >> gy >> gx; -- sy; -- sx; -- gy; -- gx; vector s(h); for(int i=0; i> s[i]; queue > q; vector > check(h, vector(w, false)); q.push(make_pair(sy, sx)); check[sy][sx] = true; while(!q.empty()){ int y = q.front().first; int x = q.front().second; q.pop(); if(y == gy && x == gx){ cout << "YES" << endl; return 0; } for(int i=0; i<4; ++i){ int y2 = y + dy[i]; int x2 = x + dx[i]; if(!(0 <= y2 && y2 < h && 0 <= x2 && x2 < w)) continue; if(!check[y2][x2] && abs(s[y2][x2] - s[y][x]) <= 1){ q.push(make_pair(y2, x2)); check[y2][x2] = true; } if(s[y2][x2] < s[y][x]){ y2 += dy[i]; x2 += dx[i]; if(!(0 <= y2 && y2 < h && 0 <= x2 && x2 < w)) continue; if(!check[y2][x2] && s[y2][x2] == s[y][x]){ q.push(make_pair(y2, x2)); check[y2][x2] = true; } } } } cout << "NO" << endl; return 0; }