#!/bin/sh python3 <<'PY' def A(*x):return sum(x) def M(x,m):return x-m*(x//m) def J(a,b): if a==0:return b if b==0:return a if a==b:return a return 3 T={} for p in range(5): for b in range(7): T[p,b]=M(A(73,29*p,31*b,17*p*b,11*p*p,13*b*b),997) s=[1,1,1,1] S={} S[4,(0,)]=(3,1,2,1) S[2,(1,)]=(3,1,2,1) C={(0,2):0,(0,5):1,(1,1):2,(1,6):3,(2,3):4,(3,4):5,(4,2):6} for b in range(7): t=T[0,b] u=M(A(t,0,2*b),4) v=M(A(2*t,0,b),4) w=M(A(t,0,b),4) print('before',b,t,u,v,w,tuple(s)) if (0,b) not in C: k=M(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]) else: c=C[0,b] q=M(A(0,1,M(t,4)),5) if q==0:q=M(A(q,1),5) if b==2:gp=(0,) else:gp=(1,) a=tuple(J(s[M(A(i,0,b),4)],A(1,M(A(t,i),2))) for i in range(4)) sg=S[q,gp] print(' call q',q,'gp',gp,'a',a,'S',sg) s[u]=J(s[u],sg[v]) s[w]=J(s[w],sg[M(A(v,1),4)]) print('after',b,tuple(s)) PY