#include < iostream > #include < cstdio > using namespace std;
const int M = 1000000007;
int k,
c[10];
long long f[16][16][16][16][16][6];
long long dp(int a, int b, int c, int d, int e, int l) {
if (a + b + c + d + e == 0) return 1;
if (f[a][b][c][d][e][l]) return f[a][b][c][d][e][l];
long long t = 0;
if (a) t += (a - (l == 2)) * dp(a - 1, b, c, d, e, 1);
if (b) t += (b - (l == 3)) * dp(a + 1, b - 1, c, d, e, 2);
if (c) t += (c - (l == 4)) * dp(a, b + 1, c - 1, d, e, 3);
if (d) t += (d - (l == 5)) * dp(a, b, c + 1, d - 1, e, 4);
if (e) t += e * dp(a, b, c, d + 1, e - 1, 5);
f[a][b][c][d][e][l] = t % M;
return f[a][b][c][d][e][l];
}
int main() {
cin >> k;
int x;
for (int i = 1; i <= k; ++i) {
cin >> x; ++c[x];
}
long long ans = dp(c[1], c[2], c[3], c[4], c[5], 0) % M;
cout << ans << endl;
return 0;
}
来源: http://www.bubuko.com/infodetail-2279945.html