/* 题目意思太模糊,其实是个超级水题,做的没什么意思,不过把以前的那种写代码的习惯稍微改了下 */
思路:只要求出做出最多的题就是解,每次都从第一个题开始做,做下一个题的时间一定要大于等于上一个题的时间。(肯定存在一个最大的情况)
#include < iostream >
#include < cstdio >
#define N 30
using namespace std;
int n,res;
int a[N][N],v[N];
int Max(int x,int y) {return x>y?x:y;}
void dfs(int k,int temp,int s)
{
if(s>=n || res==n )
{
res=n;
return;
}
res=Max(res,s);
for(int i=1;i<=n;i++)
{
if(!v[i] && a[k][i]>=temp)
{
v[i]=1;
dfs(i,a[k][i],s+1);
v[i]=0;
}
}
}
int main ()
{
//freopen("t.txt","r",stdin);
int i,j;
while(scanf("%d",&n)!=EOF)
{
res=-1*0x3f3f3f3f;
for(i=1 ; i<=n ; i++)
for(j=1 ; j<=n ; j++)
scanf("%d",&a[i][j]);
memset(v,0,sizeof(v));
v[1]=1;
dfs(1,0,1);
printf("%d\n",res);
}
return 0;
}