#ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #endif // C++ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif using namespace std; typedef long long ll; typedef pair Pint; typedef pair P; //typedef pair> P; //typedef tuple T; ll INFL = 1000000000000000010;//10^18 = 2^60 int INF = 2147483600;//10^9 ll MOD = 1000000007; //vector dy = {0,0,1,-1}; //vector dx = {1,-1,0,0}; int N; vector A(110); double dp[110][110][110]; double solve(int x, int y, int z){ if(dp[x][y][z] != -1) return dp[x][y][z]; double exp_num = (N)/(N-z); double res = 0; if(x != N) res += (solve(x+1, y, z) + exp_num) * (N-x) / (N-z); if(y != x) res += (solve(x, y+1, z) + exp_num) * (x-y) / (N-z); if(z != y) res += (solve(x, y, z+1) + exp_num) * (y-z) / (N-z); return dp[x][y][z] = res; } int main(void){ cin >> N; for(int i = 0; i < N; i++) cin >> A[i]; int a = 0, b = 0, c = 0, d = 0; for(int i = 0; i < N; i++){ if(A[i] >= 1) a++, b++, c++; if(A[i] >= 2) b++, c++; if(A[i] >= 3) c++; } for(int i = 0; i < 110; i++){ for(int j = 0; j < 110; j++){ for(int k = 0; k < 110; k++){ dp[i][j][k] = -1; } } } dp[N][N][N] = 0; cout << solve(a, b, c) << endl; }