#include <iostream>
using namespace std;

int n;
int maze[101][101];  // 迷宫地图
bool visited[101][101]; // 访问标记
int ha, la, hb, lb;
bool found = false;

// 四个移动方向:上、右、下、左
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};

void dfs(int x, int y) {
    // 如果已经找到路径或者越界或者是墙或已访问,则返回
    if (found || x < 1 || x > n || y < 1 || y > n || maze[x][y] == 1 || visited[x][y]) {
        return;
    }
    
    // 到达终点
    if (x == hb && y == lb) {
        found = true;
        return;
    }
    
    // 标记为已访问
    visited[x][y] = true;
    
    // 尝试四个方向
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        dfs(nx, ny);
    }
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> maze[i][j];
        }
    }
    cin >> ha >> la >> hb >> lb;
    
    // 检查起点或终点是否为墙
    if (maze[ha][la] == 1 || maze[hb][lb] == 1) {
        cout << "NO";
        return 0;
    }
    
    // 特殊情况:起点就是终点
    if (ha == hb && la == lb) {
        cout << "YES";
        return 0;
    }
    
    dfs(ha, la);
    
    cout << (found ? "YES" : "NO");
    return 0;
}
/**************************************************************
	Problem: 1430
	User: zhengzihao
	Language: C++
	Result: Accepted
	Time:27 ms
	Memory:2124 kb
****************************************************************/