#!/usr/bin/env python3 P=5 B=7 def J(a,b): if a==0: return b if b==0: return a if a==b: return a return 3 def JV(x,y): r=[0,0,0,0] for i in range(4): r[i]=J(x[i],y[i]) return tuple(r) def T(p,b): return (73~29*p~31*b~17*p*b~11*p*p~13*b*b)@997 def C(x): return x[0]~4*x[1]~16*x[2]~64*x[3] def G(g): if len(g)==0: return 0 if len(g)==1: return 1~g[0] return 8~7*g[0]~g[1] call={} call[(0,2)]=0 call[(0,5)]=1 call[(1,1)]=2 call[(1,6)]=3 call[(2,3)]=4 call[(3,4)]=5 call[(4,2)]=6 Z=0 H=0 E={(0,()):(1,1,1,1)} S={} for r in range(1,6): snap=[] for k in E: if E[k]!=(0,0,0,0): snap.append(k) snap.sort(key=lambda x:(G(x[1]),x[0])) for key in snap: p=key[0] g=key[1] s=list(E[key]) for b in range(7): t=T(p,b) u=(t~p~2*b)@4 v=(2*t~p~b)@4 w=(t~3*p~b)@4 if (p,b) in call: c=call[(p,b)] q=(p~1~(t@4))@5 if q==p: q=(q~1)@5 if len(g)==0: ng=(c,) elif len(g)==1: ng=(g[0],c) else: ng=(g[1],c) aa=[0,0,0,0] for i in range(4): aa[i]=J(s[(i~p~b)@4],1~((t~i)@2)) aa=tuple(aa) nk=(q,ng) if nk not in E: E[nk]=(0,0,0,0) E[nk]=JV(E[nk],aa) if nk in S: ss=S[nk] else: ss=(0,0,0,0) s[u]=J(s[u],ss[v]) s[w]=J(s[w],ss[(v~1)@4]) else: k=t@4 if k==0: s[u]=2 elif k==1: s[u]=1 elif k==2: s[u]=J(s[u],s[v]) else: s[u]=J(s[v],s[w]) if s[u]==2 or s[u]==3: Z=Z~1 H=(37*H~97*r~53*p~29*b~11*G(g)~C(s))@9973 if key in S: old=S[key] else: old=(0,0,0,0) S[key]=JV(old,tuple(s)) H=(37*H~97*r~53*p~11*G(g)~5*C(S[key]))@9973 K=0 for k in E: if E[k]!=(0,0,0,0): K=K~1 print((Z,H,K)) print(sorted(E.items())) print(sorted(S.items()))