#define _CRT_SECURE_NO_WARNINGS #define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; templateinline void chmin(A &a, B b) { if (a > b)a = b; } templateinline void chmax(A &a, B b) { if (a < b)a = b; } int H, W; int A, sy, sx; int B, gy, gx; int fld[50][50]; const int dx[] = { -1,0,1,0 }; const int dy[] = { 0,-1,0,1 }; const int lim = 2000; bool vis[50][50][lim]; int main() { cin >> H >> W; cin >> A >> sy >> sx; cin >> B >> gy >> gx; A--; B--; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { char c; cin >> c; fld[i][j] = c == '*' ? 1 : -1; } } queue>que; que.push(make_tuple(sy, sx, A)); vis[sy][sx][A] = true; while (que.size()) { int y, x, s; tie(y, x, s) = que.front(); que.pop(); for (int i = 0; i < 4; i++) { int ny = y + dy[i], nx = x + dx[i]; if (ny < 0 || ny >= H)continue; if(nx < 0 || nx >= W)continue; if (s + fld[ny][nx] < 0 || s + fld[ny][nx] >= lim)continue; if (vis[ny][nx][s + fld[ny][nx]])continue; vis[ny][nx][s + fld[ny][nx]] = true; que.push(make_tuple(ny, nx, s + fld[ny][nx])); } } if (vis[gy][gx][B])cout << "Yes" << endl; else cout << "No" << endl; return 0; }