#include <iostream>
using namespace std;
int a[20004][20004]={0};//创建二维数组
int main() {
int n{};
cin>>n;//n行n列
int N=n;
int l=-1;//输出YES的条件
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cin>>a[i][j];//将数据输入矩阵
}
// cout<<a[1][0];
int k{0};//矩阵中每行前面0的个数
int p{0};//另设变量作为k的操作数
for(int i=0;i<n;i++)//n行循环
{
// if(i%3==0)
for(int j=0;j<n;j++)//n列循环
{
if(k)//如果k为真,说明本行前面需要有k个0
{
int p{};
p=k;//k的操作数
int f=0;//第i行第0列
while(p--)//循环p次,即检查本行前面的k个数是否为0
{
if(a[i][f]!=0)
{
cout<<"NO";//如果有不为0的数就输出NO并结束程序
return 0;
}
f++;//列数加加
}
}
}
k++;//下一行0的个数加加
}
if(l==-1)
cout<<"YES";
return 0;
}
// 64 位输出请用 printf("%lld")