#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
int a[101][101],n,sx,sy,ex,ey,f;//f到达标志 
void dfs(int i,int j){
	a[i][j] = 1;
	if(i==ex && j==ey){
		f = 1;
		return;
	}
	//不能超越格子,必须能通行,没有一条到终点 
	if(i-1>=1 && i-1<=n && a[i-1][j]==0 && f==0) dfs(i-1,j);
	if(i+1>=1 && i+1<=n && a[i+1][j]==0 && f==0) dfs(i+1,j);
	if(j-1>=1 && j-1<=n && a[i][j-1]==0 && f==0) dfs(i,j-1);
	if(j+1>=1 && j+1<=n && a[i][j+1]==0 && f==0) dfs(i,j+1);
} 
int main(){
	int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
	//递归深搜之前判断起点、终点是否有效 
	if(a[sx][sy]==1||a[ex][ey]==1) {
		printf("NO");
		return 0;
	} 
	//如果有效开始递归 
	dfs(sx,sy);
	//到底有没有到达终点 
	if(f==0) printf("NO");
	else printf("YES");
	return 0;
}

/**************************************************************
	Problem: 1430
	User: admin
	Language: C
	Result: Accepted
	Time:26 ms
	Memory:1184 kb
****************************************************************/