#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int A[N],dp[N];
int main() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>A[i];
	}
	int ans=-1;        //记录最大的dp[i]
	for(int i=1; i<=n; i++) {     //按顺序计算出dp[i]的值
		dp[i]=1;        //边界初始条件(即先假设每个元素自成一个子序列)
		for(int j=1; j<i; j++) {
			if(A[i]>A[j]&&(dp[j]+1>dp[i])) {
				dp[i]=dp[j]+1;        //状态转移方程,用以更新dp[i]
			}
		}
		ans=max(ans,dp[i]);
	}
	cout<<ans<<endl;
	return 0;
}

/**************************************************************
	Problem: 1794
	User: admin
	Language: C++
	Result: Accepted
	Time:368 ms
	Memory:2152 kb
****************************************************************/