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