#include typedef long long ll; using namespace std; #define DUMP(x) cout << #x << " = " << (x) << endl; #define FOR(i, m, n) for(ll i = m; i < n; i++) #define IFOR(i, m, n) for(ll i = n - 1; i >= m; i-- ) #define REP(i, n) FOR(i,0,n) #define IREP(i, n) IFOR(i,0,n) #define FOREACH(x,a) for(auto& (x) : (a) ) #define ALL(v) (v).begin(), (v).end() #define SZ(x) ll(x.size()) ll n; vector>> dp; double rec(ll i, ll j, ll k){ if(i==0 && j==0 && k==0) return 0; if(dp[i][j][k]>0) return dp[i][j][k]; double a=0,b=0,c=0; if(i>0){ a = rec(i-1,j+1,k); dp[i-1][j+1][k] = a; } if(j>0){ b = rec(i,j-1,k+1); dp[i][j-1][k+1] = b; } if(k>0){ c = rec(i,j,k-1); dp[i][j][k-1] = c; } return 1.0*(n+i*a+j*b+k*c)/(i+j+k); } int main(){ cin >> n; vector cnt(4,0); REP(i,n){ ll a; cin >> a; a = min(a,3LL); cnt[a]++; } // dp[i][j][k] = 0枚:i, 1枚:j, 2枚:k 種類からコンプまで必要なカード枚数の期待値 dp = vector>>(n+1, vector>(n+1, vector(n+1,0.0))); cout << fixed << setprecision(10) << rec(cnt[0],cnt[1],cnt[2]) << endl; }