#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;
}