#include<bits/stdc++.h>
int b[100];
int amaxlen[100];
int main()
{
int i,j,n;
scanf("%d",&n);
amaxlen[1]=1;
for(i=1;i<=n;++i)
{
scanf("%d",&b[i]);
}
for(i=2;i<=n;++i)
{//求以第i个数为终点的最长上升子序列的长度
int ntmp=0;//记录第i的数左边子序列最大长度
for(j=1;j<i;++j)//搜索以第i个数为终点的最长上升子序列长度
if(b[i]>b[j])
{//
if(ntmp<amaxlen[j])
ntmp=amaxlen[j];
}
amaxlen[i]=ntmp+1;
}
int t=0;
for(i=1;i<=n;++i)
t=std::max(amaxlen[i],t);
printf("%d\n",t);
return 0;
int b[100];
int amaxlen[100];
int main()
{
int i,j,n;
scanf("%d",&n);
amaxlen[1]=1;
for(i=1;i<=n;++i)
{
scanf("%d",&b[i]);
}
for(i=2;i<=n;++i)
{//求以第i个数为终点的最长上升子序列的长度
int ntmp=0;//记录第i的数左边子序列最大长度
for(j=1;j<i;++j)//搜索以第i个数为终点的最长上升子序列长度
if(b[i]>b[j])
{//
if(ntmp<amaxlen[j])
ntmp=amaxlen[j];
}
amaxlen[i]=ntmp+1;
}
int t=0;
for(i=1;i<=n;++i)
t=std::max(amaxlen[i],t);
printf("%d\n",t);
return 0;
}