#include <stdio.h>
int p[1001];
int dp[1001];
int ap[1001];
int get_max(int a, int b) {
return a > b ? a : b;
}
int main() {
//freopen("input.txt", "rt", stdin);
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &p[i]);
dp[i] = 1;
ap[i] = 0;
}
for (int i = 1; i <= n; i++) {
//printf("%d\n", p[i]);
for (int j = 1; j <= i; j++) {
if (p[i] > p[j]) {
dp[i] = get_max(dp[i], dp[j] + 1);
//printf("dp[%d]=%d\n", i, dp[i]);
}
}
}
for (int i = n; i >= 1; i--) {
//printf("%d\n", p[i]);
for (int k = n; k >= i; k--) {
if (p[i] > p[k]) {
ap[i] = get_max(ap[i], ap[k] + 1);
//printf("ap[%d]=%d\n", i, ap[i]);
}
}
}
int m = 0;
for (int i = 1; i <= n; i++) {
if (m < ap[i] + dp[i]) {
m = ap[i] + dp[i];
}
}
printf("%d", m);
return 0;
}