#include<bits/stdc++.h>
using namespace std;
/*
二維陣列:地圖、標記陣列
遞迴:搜尋方法dfs(),透過一個座標搜尋四個方向
其他:二維陣列中的上右下左方向陣列
*/
int G[15][15]; //地圖
bool vis[15][15];//標記陣列和地圖一樣大,1代表被走過,0代表沒有
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; //dx是橫座標 dy是縱座標
int n;//n*n大小
int f = 0;//標記是否能走到,1代表能,0代表不能
//dfs()搜尋函式
void dfs(int x,int y){
if(x==n&&y==n){ //判斷該座標是終點
f=1; //修改標記能到達終點
return ;
}
//依次檢查4個方向
for(int i=0;i<4;i++){
//求出下一個目標點的座標
int xx = x+dx[i];
int yy = y+dy[i];
//判斷位置是否合法,全部成立
//地圖內 xx>=1&&xx<=n&&yy>=1&&yy<=n
//可以通行/不為障礙物 G[xx][yy]!=1
//沒有被走過 vis[xx][yy]==0
if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&G[xx][yy]!=1
&&vis[xx][yy]==0){
vis[xx][yy]=1;//走這個點,標記走過
dfs(xx,yy); //繼續搜尋這個點
}
}
}
int main(){
//地圖輸入
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>G[i][j];
}
}
//標記起點,開啟搜尋
vis[1][1]=1;
dfs(1,1);
//非0為真
if(f) cout<<"YES";
else cout<<"NO";
return 0;
}