import numpy.random as rd
from scipy.special import binom

b,n = 0,1

def N(n,p) :
    L = [b]*p+[n]*(n-p)
    L = rd.permutation(L)
    nb = 0
    for k in range(n-1) :
        if L[k] != L[k+1] :
            nb += 1
    return nb
    
def E(n,p) :
    rep = 1000
    s = 0
    for k in range(rep) :
        s += N(n,p)
    return s/rep
    
for p in [1,3,7,12] :
    print(E(24,p),2*p*(24-p)/24)
    s = 0
    for k in range(1,p+1) :
        s += k*binom(24,k)
    print(s/binom(24,p))
    
def V(n,p) :
    rep = 1000
    s,t = 0,0
    for k in range(rep) :
        r = N(n,p)
        s += r**2
        t += r
    return s/rep-(t/rep)**2
    
# for p in [1,3,7,12] :
#     print(V(24,p),2*p*(24-p)/24+2*(24-2)*p*(24-p)/(24*23)+4*p*(p-1)*(24-p)*(23-p)/(24*23)-(2*p*(24-p)/24)**2)

        
