#include <iostream>
using namespace std;
/*
最长上升子序列:dp[i]表示以i位置元素作为结尾的最长长度
状态转移方程式:dp[i]=max(dp[i],dp[j]+1) j:1~i-1的每个数a[i]>a[j]
初始化:dp[i]=1 默认每个数的LIS都是1
返回结果:dp中的最大值
*/
int n,a[10005],dp[10005],ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
dp[i]=1;
}
for(int i=2;i<=n;i++){
for(int j=1;j<i;j++){
if(a[i]>a[j]){
dp[i]=max(dp[i],dp[j]+1);
ans=max(ans,dp[i]);
}
}
}
cout<<ans;
return 0;
}