#include #include #include using namespace std; using i64 = long long; using Tup = tuple; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x G; vector dr = {0, 0, 1, -1}, dc = {1, -1, 0, 0}; vector>> seen; bool nya(queue que) { while(!que.empty()) { Tup cur = que.front(); que.pop(); int w = get<0>(cur), r = get<1>(cur), c = get<2>(cur); if(w == b && r == gr && c == gc) { return true; } if(seen[r][c][w]) { continue; } seen[r][c][w] = true; for(int i : range(dr.size())) { int nr = r + dr[i], nc = c + dc[i]; if(nr < 0 || R <= nr || nc < 0 || C <= nc) { continue; } int nw = w; if(G[nr][nc] == '.') { nw = w - 1; } else { nw = w + 1; } if(nw <= 0) { continue; } que.push(make_tuple(nw, nr, nc)); } } return false; } int main(void) { scanf("%d%d%d%d%d%d%d%d", &R, &C, &a, &sr, &sc, &b, &gr, &gc); G.resize(R); seen.assign(R, vector>(C, vector(4000))); for(int r : range(R)) { cin >> G[r]; } queue que; que.push(make_tuple(a, sr, sc)); puts(nya(que) ? "Yes" : "No"); return 0; }