from fractions import Fraction

def probabilities(s, kmax):
  tab = [[0 for n in range(s-e+3)] for e in range(s+3)]
  tab[1][s] = 1
  sk = 1
  ps = [Fraction(0, sk)]
  for k in range(kmax):
    sk *= s
    for n in range(0, s+1):
      for e in range(s-n+1):
        tab[e+1][n] = (s-n-e) * tab[e+1][n] + (n+1) * tab[e][n+1] + (e+1) * tab[e+2][n]
    ps.append(1-Fraction(sum(tab[1]), sk))
  return ps


smax = 20
kmax = 50

print('  s    k    P (float)    P (rational)')
for s in range(1, smax+1):
  print()
  ps = probabilities(s, kmax)
  for k in range(kmax+1):
    p = ps[k]
    print('%3d  %3d    %.5e  %s' % (s, k, float(p), p))
