#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;
}