#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int dy[] = {0, -1, 0, 1}; int dx[] = {-1, 0, 1, 0}; bool vis[50][50][1100]; int main() { int H, W; cin >> H >> W; int zs, ys, xs; cin >> zs >> ys >> xs; int zt, yt, xt; cin >> zt >> yt >> xt; vector a(H); for (int y = 0; y < H; y++) cin >> a[y]; vis[ys][xs][zs] = true; queue Y, X, Z; Y.push(ys); X.push(xs); Z.push(zs); while (!Z.empty()) { int y = Y.front(); Y.pop(); int x = X.front(); X.pop(); int z = Z.front(); Z.pop(); for (int k = 0; k < 4; k++) { int _y = y + dy[k], _x = x + dx[k]; if (_y >= 0 && _y < H && _x >= 0 && _x < W); else continue; int _z = z + (a[_y][_x] == '*' ? 1 : -1); if (_z > 0 && _z < 1100 && !vis[_y][_x][_z]) { vis[_y][_x][_z] = true; Y.push(_y); X.push(_x); Z.push(_z); } } } cout << (vis[yt][xt][zt] ? "Yes" : "No") << endl; }