#include <bits/stdc++.h>
using namespace std;
int n, a[2005], st1[2005], st2[2005], dr1[2005], dr2[2005], ma;
int dp11[2005][2005], dp12[2005][2005], dp22[2005][2005], dpd2[2005][2005];
int main() {
  cin.sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) {
    if (a[i] == 1)
      st1[i] = st1[i - 1] + 1;
    else
      st1[i] = st1[i - 1];
    if (a[i] == 2)
      st2[i] = max(st1[i - 1], st2[i - 1]) + 1;
    else
      st2[i] = st2[i - 1];
  }
  for (int i = n; i >= 1; i--) {
    if (a[i] == 1)
      dr1[i] = max(dr1[i + 1], dr2[i + 1]) + 1;
    else
      dr1[i] = dr1[i + 1];
    if (a[i] == 2)
      dr2[i] = dr2[i + 1] + 1;
    else
      dr2[i] = dr2[i + 1];
  }
  for (int i = 1; i <= n; i++) ma = max(ma, max(st1[i], st2[i]));
  for (int d = 0; d <= n - 1; d++)
    for (int i = 1; i <= n; i++) {
      int j = i + d;
      if (j > n) break;
      if (d == 0) {
        if (a[i] == 1)
          dp11[i][i] = 1;
        else
          dp22[i][i] = 1;
      } else {
        if (a[j] == 1) {
          dp22[i][j] = dp22[i][j - 1];
          if (dp11[i][j - 1]) dp11[i][j] = 1 + dp11[i][j - 1];
          if (dp12[i][j - 1]) dp12[i][j] = 1 + dp12[i][j - 1];
          if (dp22[i][j - 1]) dp12[i][j] = max(dp12[i][j], 1 + dp22[i][j - 1]);
        }
        if (a[j] == 2) {
          dp11[i][j] = dp11[i][j - 1];
          dp12[i][j] = dp12[i][j - 1];
          if (dp22[i][j - 1]) dp22[i][j] = 1 + dp22[i][j - 1];
        }
      }
      ma = max(ma, st1[i - 1] + dp11[i][j] + max(dr1[j + 1], dr2[j + 1]));
      ma = max(ma, st1[i - 1] + dp12[i][j] + dr2[j + 1]);
      ma = max(ma, max(st1[i - 1], st2[i - 1]) + dp22[i][j] + dr2[j + 1]);
    }
  cout << ma;
}
