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