#include <bits/stdc++.h>
using namespace std;
map<int, int> res[51][51][51][51];
int D[51];
int N;
const int MOD = 1e9 + 7;
long long dp(int id, long long mn1, long long mn2, long long mx1,
             long long mx2) {
  if (res[mn1][mn2][mx1][mx2].count(id)) return res[mn1][mn2][mx1][mx2][id];
  if (id == N) return mn1 + mn2 + mx1 + mx2 == 0;
  if (mn1 + mn2 + mx1 + mx2 == 0) return 0;
  if (!(mn1 + mn2)) return dp(id, mx1, mx2, 0, 0);
  long long w = 0;
  if (D[id] == 2) {
    if (mn1) w += mn1 * dp(id + 1, mn1 - 1, mn2, mx1 + 1, mx2);
    if (mn2) w += mn2 * dp(id + 1, mn1 + 1, mn2 - 1, mx1 + 1, mx2);
  } else {
    if (mn1) w += mn1 * dp(id + 1, mn1 - 1, mn2, mx1, mx2 + 1);
    if (mn2) w += mn2 * dp(id + 1, mn1 + 1, mn2 - 1, mx1, mx2 + 1);
    long long c21x = mx1 * (mx1 - 1) / 2, c22x = mx2 * (mx2 - 1) / 2;
    if (mn1 && mx1 > 1)
      w += mn1 * c21x * dp(id + 1, mn1 - 1, mn2, mx1 - 2, mx2);
    if (mn1 && mx2 > 1)
      w += mn1 * c22x * dp(id + 1, mn1 - 1, mn2, mx1 + 2, mx2 - 2);
    if (mn2 && mx1 > 1)
      w += mn2 * c21x * dp(id + 1, mn1 + 1, mn2 - 1, mx1 - 2, mx2);
    if (mn2 && mx2 > 1)
      w += mn2 * c22x * dp(id + 1, mn1 + 1, mn2 - 1, mx1 + 2, mx2 - 2);
    if (mn1 && mx1 && mx2)
      w += mn1 * mx1 * mx2 * dp(id + 1, mn1 - 1, mn2, mx1, mx2 - 1);
    if (mn2 && mx1 && mx2)
      w += mn2 * mx1 * mx2 * dp(id + 1, mn1 + 1, mn2 - 1, mx1, mx2 - 1);
  }
  if (mn1 && mx1)
    w += mn1 * mx1 * dp(id + 1, mn1 - 1, mn2, mx1 + D[id] - 3, mx2);
  if (mn1 && mx2)
    w += mn1 * mx2 * dp(id + 1, mn1 - 1, mn2, mx1 + D[id] - 1, mx2 - 1);
  if (mn2 && mx1)
    w += mn2 * mx1 * dp(id + 1, mn1 + 1, mn2 - 1, mx1 + D[id] - 3, mx2);
  if (mn2 && mx2)
    w += mn2 * mx2 * dp(id + 1, mn1 + 1, mn2 - 1, mx1 + D[id] - 1, mx2 - 1);
  return res[mn1][mn2][mx1][mx2][id] = w % MOD;
}
int main() {
  int n;
  cin >> n;
  N = n;
  for (int i = 0; i < n; i++) cin >> D[i];
  if (D[0] == 2)
    cout << dp(1, 0, 1, 0, 0) << endl;
  else {
    if (D[1] == 2)
      cout << dp(2, 0, 1, 1, 0) << endl;
    else
      cout << dp(2, 0, 1, 0, 1) << endl;
  }
}
