python3 <<'PY' N={i:[] for i in range(1,9)} for e in (12,23,34,45,56,67,78,18,25,36,47): a,b=divmod(e,10) N[a].append(b) N[b].append(a) for v in N: N[v].sort() adj=lambda a,b: b in N[a] mod13=lambda x: pow(x,1,13) par=lambda x: pow(x,1,2) def lr(T): return (T[1],T[2],T[0]) def rr(T): return (T[2],T[0],T[1]) def phi(T,b,c): e=T[b] U=[x for x in N[e] if x not in T] if not U: return lr(T) if c==1 else T x=min(U) if c==0 else max(U) L=list(T) L[b]=x return tuple(L) def psi(T,b,c): j=2-b e=T[j] U=[x for x in N[e] if x not in T] if not U: return rr(T) if c==0 else T x=max(U) if c==0 else min(U) L=list(T) L[j]=x return tuple(L) def P(T): return [sum(1 for x in T if adj(v,x)) for v in range(1,9)] def sig(T,Q): return mod13(sum([T[0],2*T[1],3*T[2],Q[T[0]-1],2*Q[T[1]-1],3*Q[T[2]-1]])) T0s={0:(1,4,7),1:(2,5,8),2:(3,6,1)} wa={0:2,1:3,2:2} wbc={0:3,1:2} wd={0:3,1:1} we={0:1,1:1} num=0 den=0 for A in range(3): T0=T0s[A] for B in range(2): for C in range(2): F=1 if (8 in T0 or par(sum([T0[0],T0[2]]))==0) else 0 G0=1 if sum(1 for x in T0 if x in (2,4,6,8))>=2 else 0 X=phi(T0,B,C) Y=psi(T0,B,C) S=0 if X==T0 else 1 SX=sum(set(X)) SY=sum(set(Y)) J=1 if (Y!=X and SX==SY) else 0 if F==1 and S==0: T1=T0 src='T0' elif J==1 and par(sum([A,B,C]))==0: T1=Y src='Y' else: T1=X src='X' Tpre=T1 P0=P(T1) r0=sig(T1,P0) Z0=1 if (par(sum([P0[1],P0[4],B]))==1 and (adj(T1[0],T0[1]) or adj(T1[2],T0[0]))) else 0 T1r=T1 if Z0==1: if src=='X': T1r=Y if par(SX)==par(SY) else T0 elif src=='Y': T1r=lr(T0) else: T1r=X P1=P(T1r) if Z0==1: m=len(set(Tpre).symmetric_difference(set(T1r))) r1=mod13(sum([sig(T1r,P1),r0,m])) else: P1=P0 r1=r0 for D in range(2): for E in range(2): T2=T1r Q=0 R=r1 if D==1: if par(sum([R,Z0]))==0: T2=T0 Q=1 if adj(X[1],T0[0]): R=r0 Q=2 else: T2=rr(T1r) Q=3 R=mod13(sum([R,T2[0],-T1r[0]])) if E==1: if Q==2: R=mod13(sum([R,P0[2],P0[5],A])) elif Q==3: cnt=sum(1 for x in set(X) if adj(x,T0[1])) R=mod13(sum([R,cnt])) else: R=mod13(sum([R,T2[1] if G0==1 else T2[2]])) Zstar=1 if (par(sum([P0[0],P0[7],C]))==0 and (adj(T2[1],T0[2]) or adj(T2[0],Tpre[0]))) else 0 if Zstar!=Z0: R=mod13(sum([r0,sum(set(T2)), X[0] if Zstar==1 else Y[2]])) T2=lr(T2) if Zstar==1 else rr(T2) Zdag=1 if (par(sum([P1[3],P0[6],A,B]))==1 and (adj(T2[2],T0[0]) or adj(Tpre[0],T2[1]))) else 0 if Zdag==1: if Zstar==1: T2=(T2[1],T2[0],T2[2]) else: T2=rr(T2) R=mod13(sum([r1,sum(set(T2)),P0[T2[0]-1], Y[1] if C==1 else X[1]])) Z1=1 if (adj(T2[0],T0[2]) or (P1[6]