python3 - <<'PY' P=5 B=7 call=dict([((0,2),0),((0,5),1),((1,1),2),((1,6),3),((2,3),4),((3,4),5),((4,2),6)]) def mod(a,b): return a-b*(a//b) def T(p,b): return mod(sum((73,29*p,31*b,17*p*b,11*p*p,13*b*b)),997) 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): return tuple(J(x[i],y[i]) for i in range(4)) def cod(x): return sum((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 sum((1,g[0])) return sum((8,7*g[0],g[1])) E=dict() S=dict() zero=(0,0,0,0) E[(0,())]=(1,1,1,1) Z=0 H=0 for r in range(1,6): snap=sorted([x for x in E if E[x]!=zero],key=lambda x:(G(x[1]),x[0])) print('SWEEP',r) for (p,g) in snap: s=list(E[(p,g)]) for b in range(7): t=T(p,b) k=mod(t,4) u=mod(sum((t,p,2*b)),4) v=mod(sum((2*t,p,b)),4) w=mod(sum((t,3*p,b)),4) if (p,b) in call: c=call[(p,b)] q=mod(sum((p,1,k)),5) if q==p: q=mod(sum((q,1)),5) if len(g)==0: g2=(c,) elif len(g)==1: g2=(g[0],c) else: g2=(g[1],c) a=tuple(J(s[mod(sum((i,p,b)),4)],sum((1,mod(sum((t,i)),2)))) for i in range(4)) E[(q,g2)]=JV(E.get((q,g2),zero),a) Ss=S.get((q,g2),zero) s[u]=J(s[u],Ss[v]) s[w]=J(s[w],Ss[mod(sum((v,1)),4)]) else: 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=sum((Z,1)) H=mod(sum((37*H,97*r,53*p,29*b,11*G(g),cod(s))),9973) newS=JV(S.get((p,g),zero),tuple(s)) S[(p,g)]=newS H=mod(sum((37*H,97*r,53*p,11*G(g),5*cod(newS))),9973) print('PAIR',r,p,g,tuple(s),newS) K=len([x for x in E if E[x]!=zero]) print('RESULT',Z,H,K) print('E') for x in sorted(E,key=lambda x:(G(x[1]),x[0])): print(x,E[x]) print('S') for x in sorted(S,key=lambda x:(G(x[1]),x[0])): print(x,S[x]) PY