#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define FOR(i,x,y) for(vlong i = (x) ; i <= (y) ; ++i)
#define CLR(x,y) memset(x,y,sizeof(x))
#define LL long long
#define LLU long long unsigned int
typedef long long vlong;
typedef unsigned long long uvlong;

const int MXN = 5005;

int N;
int A[MXN], B[MXN];
unordered_map<int, int> Map;
int DP[MXN][MXN];

int call(int u, int len1, int len2){
    if(u == N+1) return 0;
    if(len1>len2) swap(len1, len2);
    if(DP[u][len2] != -1) return DP[u][len2];

    int res = 0, ret;
    /// Put A[u] to 1st lane:
    ret = call(u+1, min(len1, A[u]), len2);
    if(A[u]<=len1) ret++;
    res = max(res, ret);

    /// Put A[u] to 2nd lane:
    ret = call(u+1, len1, min(len2, A[u]));
    if(A[u]<=len2) ret++;
    res = max(res, ret);

    return DP[u][len2] = res;
}

int main () {
    scanf("%d",&N);
    FOR(i,1,N){
        scanf("%d",&A[i]);
        B[i] = A[i];
    }
    sort(B+1,B+N+1);
    int x = 0;
    FOR(i,1,N){
        if(Map.find(B[i]) == Map.end()){
            Map[B[i]] = x++;
        }
    }
    FOR(i,1,N){
        A[i] = Map[A[i]];
    }
    CLR(DP, -1);
    int res = call(1, 5000, 5000);
    printf("%d\n",res);

    return 0;
}