
/*
AOJ: Longest Increasing Subsequence
https://onlinejudge.u-aizu.ac.jp/problems/DPL_1_D
着席位置 教卓から見て左中央
*/

#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <utility>
#include <tuple>
using namespace std;

const double pi = acos(-1);
#define nyan cout<<"(=^•ω•^=)"<<endl;
#define int long long
#define rep(i,n) for(int i=0;i<n;i++)

int n;
int a[1100000000];
int dp[110000];
// dp[i] := a[i]を最後の要素とするようなLISのサイズ
int ans;

signed main(){
    cin>>n;rep(i,n)cin>>a[i];
    for(int i=0;i<n;i++){
        dp[i]=1;
        for(int j=0;j<i;j++){
            if(a[j]<a[i])dp[i]=max(dp[i],dp[j]+1);
        }
        ans=max(ans,dp[i]);
    }
    cout<<ans<<endl;
    return 0;
}
