#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
****************************************************************/