#include<iostream>
using namespace std;
int n,a[5001],dp[5001];
int Max(int ans[],int l){//数组最大值
int m=0;
for(int i=0;i<l;i++){
m=max(m,ans[i]);
}
return m;
}
void LIS(){//LIS走起!
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(a[i]>a[j]){
dp[i]=max(dp[i],dp[j]+1);//状态转移方程:dp[i]=max(dp[i],dp[j]+1)
}
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
LIS();
cout<<Max(dp,n);
return 0;
}