#include #include #include #include #include #include #include #include #include #include #include #define repd(i,a,b) for (int i=(a);i<(b);i++) #define rep(i,n) repd(i,0,n) #define var auto #define mod 1000000007 typedef long long ll; using namespace std; typedef vector vd; typedef vector> vvd; typedef vector>> vvvd; int inputValue(){ int a; cin >> a; return a; } template void output(T a, int precision) { if(precision > 0){ cout << fixed << setprecision(precision) << a << "\n"; } else{ cout << a << "\n"; } } double dp[101][101][101]; // 0 int N; double dfs(int i, int j, int k){ if (dp[i][j][k] != 0) { return dp[i][j][k]; } int sum = i + j + k; if (sum == 0) { return dp[i][j][k] = 0; } double ret = 0; if (i > 0) ret += dfs(i - 1, j + 1, k) * i; if (j > 0) ret += dfs(i, j - 1, k + 1) * j; if (k > 0) ret += dfs(i, j, k - 1) * k; ret += N; ret /= sum; return dp[i][j][k] = ret; } int main() { // source code N = inputValue(); // 100 vector A(N); // 10 3以上は無視 vector R(3, 0); // 0枚のカード数, 1枚, 2枚 rep(i, N){ A[i] = inputValue(); if (A[i] < 3) { R[A[i]]++; } } output(dfs(R[0], R[1], R[2]), 10); return 0; }