#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n;
int h[N];
int f[N], g[N];
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d", &h[i]);
}
for(int i = 0; i < n; i++)
{
f[i] = 1;
for(int j = 0; j < i; j++)
{
if(h[i] > h[j])
{
f[i] = max(f[i], f[j] + 1);
}
}
}
for(int i = n - 1; i >= 0; i--)
{
g[i] = 1;
for(int j = n - 1; j > i; j--)
{
if(h[i] > h[j])
{
g[i] = max(g[i], g[j] + 1);
}
}
}
int res = 0;
for(int i = 0; i < n; i++)
{
res = max(res, f[i] + g[i] - 1);
}
printf("%d\n", res);
return 0;
}
/*
也是做两遍最长上升子序列模型,一遍上升,一遍下降
与AcWing 1017. 怪盗基德的滑翔翼不同的是,这题是先上升
再到某一点再下降。最长下降子序列可以从后往前最长上升子序列
*/