#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")