#include <bits/stdc++.h>
#pragma GCC optimize("-O3")
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
const int inf = INT_MAX / 2;
const long long infl = 1LL << 60;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int N, A[2020], sm[2020], dp[2020], dp2[2020];
void pre() {
  for (int i = 0; i < N; i++)
    if (A[i] == 1) sm[i] = 1;
  for (int i = 1; i < N; i++) sm[i] += sm[i - 1];
}
int getone(int l, int r) {
  int res = sm[r];
  if (l) res -= sm[l - 1];
  return res;
}
int gettwo(int l, int r) { return (r - l + 1) - getone(l, r); }
void _main() {
  cin >> N;
  for (int i = 0; i < N; i++) cin >> A[i];
  pre();
  for (int i = 0; i < N; i++) {
    dp[i] = max(getone(0, i), gettwo(0, i));
    for (int j = 0; j < i; j++) chmax(dp[i], getone(0, j) + gettwo(j + 1, i));
  }
  for (int i = 0; i < N; i++) {
    dp2[i] = max(getone(i, N - 1), gettwo(i, N - 1));
    for (int j = i + 1; j < N; j++)
      chmax(dp2[i], getone(i, j - 1) + gettwo(j, N - 1));
  }
  int ans = 1;
  for (int i = 1; i < N; i++) chmax(ans, dp[i - 1] + dp2[i]);
  cout << ans << endl;
}
