#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=1005;
int a[N],d[N],n;
int LIS()
{
d[1]=a[1];
int len=1,p;
for(int i=2;i<=n;i++)
{
p=lower_bound(d+1,d+len+1,a[i])-d; //表示以a[i]结尾的最长LIS的长度为p。
if(p>len)
d[++len]=a[i];
else
d[p]=a[i];
}
return len;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("%d\n",LIS());
}
return 0;
}