#include<iostream>
using namespace std;
//4個方向的陣列:上 右 下 左
int dx[4]={-1,0,1,0} ,dy[4]={0,1,0,-1};
//建立地圖陣列
char G[105][105];
//標記陣列,對應地圖陣列的每一個點,1代表被搜尋過
int vis[105][105];
int f = 0;//標記結果,1代表兩個點之間有路線,0代表沒有
int sx,sy;//起點座標
int ex,ey;//終點座標
int n;//一會用來接收地圖大小,n行n列
//dfs()用來搜尋一個點的上下左右位置
//因此要傳入一個點的座標
void dfs(int x,int y){
if(x==ex && y==ey){//代表被搜尋到
f=1;//修改標記
return;//結束搜尋
}
//依次搜尋4個方向 :上下左右
for(int i=0;i<4;i++){
//獲取下一次搜尋的位置
int xx=x+dx[i];
int yy=y+dy[i];
//檢查新的座標是否在地圖內
//這個點是否被搜尋過
//這個點是否是障礙物
if(xx>=0&&yy>=0&&xx<n&&yy<n&&G[xx][yy]!='#'&&vis[xx][yy]==0){
vis[xx][yy]=1;//修改標記,代表這個點被搜尋過
dfs(xx,yy);
}
}
}
int main() {
cin>>n; //接收n,
//接收地圖,n行n列
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>G[i][j];
}
}
//接收起點和終點
cin>>sx>>sy>>ex>>ey;
//開啟搜尋
//如果起點和終點是障礙物,不能開啟搜尋
if(G[sx][sy]=='#' || G[ex][ey]=='#'){
cout<<"no";
} else{
dfs(sx,sy);//從起點開始搜尋
//搜尋結束之後,判斷標記
if(f==1){
cout<<"yes";
} else{
cout<<"no";
}
}
return 0;
}