#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int dy[4] = { -1,0,1,0 }; int dx[4] = { 0,1,0,-1 }; bool visited[51][51]; char board[51][51]; int sy, sx, gy, gx, h, w; int main(void) { cin.tie(0); ios::sync_with_stdio(false); cin >> h >> w; cin >> sy >> sx >> gy >> gx; for (int i = 1; i <= h; i++) { for (int j = 1; j <= w; j++) { cin >> board[i][j]; } } memset(visited, false, sizeof(visited)); visited[sy][sx] = true; queue > que; que.push({ sy,sx }); while (!que.empty()) { int y = que.front().first; int x = que.front().second; que.pop(); for (int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if (ny <= 0 || ny > h || nx <= 0 || nx > w) { continue; } if (abs(board[ny][nx] - board[y][x]) <= 1) { if (visited[ny][nx] == false) { visited[ny][nx] = true; que.push({ ny,nx }); } } } for (int i = 0; i < 4; i++) { int ny = y + 2*dy[i]; int nx = x + 2*dx[i]; if (ny <= 0 || ny > h || nx <= 0 || nx > w) { continue; } int my = (ny + y) / 2; int mx = (nx + x) / 2; if (board[my][mx]<=board[y][x] && board[y][x]==board[ny][nx]) { if (visited[ny][nx] == false) { visited[ny][nx] = true; que.push({ ny,nx }); } } } } if (visited[gy][gx]) { cout << "YES" << '\n'; } else { cout << "NO" << '\n'; } return 0; }