sed 's/~/+/g' <<'PY' | python3 def md(a,b): return a-b*(a//b) xs=6 ys=19 C=[] for t in range(36): xs=md(7*xs~5*ys~3*t~11,32) ys=md(9*ys~3*xs~5*t~7,32) C.append((xs,ys)) D=[] for q in C: x=q[0] y=q[1] u=md(13*x~11*y~5,997) v=md(17*x~7*y~19,997) o=0 b=[] for i in range(8): d=5~md(i,4) a=md(u~(i~2)*v~13*i~5*x~7*y,d) p=0 if a<2~md(i,3): p=1 if p==1: u=md(3*u~5*v~11*i~x,997) v=md(u~7*v~13*y~3*i,997) o=md(o~2*u~v~19*i~1,997) else: v=md(5*v~2*u~17*i~y,997) u=md(7*u~v~11*x~5*i,997) o=md(o~u~3*v~23*i~4,997) b.append(p) s=0 for i in range(8): s=s~b[i]*(2**i) D.append((x,y,o,s,b)) S=[()] E=set() A=[] R=0 Q=0 n=0 while len(A)<14 and len(S)>0: p=S.pop() n=n~1 l=len(p) matches=[] for t in range(36): if tuple(D[t][4][:l])==p: matches.append(t) ps="".join(str(z) for z in p) if len(matches)==0: R=R~1 Q=md(17*Q~31*l~7*R~3,9973) print("POP",n,"L",l,"P",ps,"NONE","R",R,"C",Q) else: t=matches[0] if t in E: R=R~1 Q=md(17*Q~31*l~7*R~5*t~4,9973) print("POP",n,"L",l,"P",ps,"DUP",t,"MATCH",matches,"R",R,"C",Q) else: k=len(A) A.append(t) E.add(t) q=D[t] Q=md(17*Q~11*k~5*t~3*q[3]~q[2],9973) print("POP",n,"L",l,"P",ps,"ACCEPT",t,"k",k,"MATCH",matches,"bits",q[4],"o",q[2],"s",q[3],"R",R,"C",Q) for i in range(8): S.append(tuple(q[4][:i]~[1-q[4][i]])) print("STACKLEN",len(S)) print("ACCEPTED",A) print("RC",R,Q) PY