sed 's/~/+/g' <<'RB' | ruby require 'set' def md(a,b) a.divmod(b)[1] end xs=6 ys=19 C=[] for t in 0...36 xs=md(7*xs~5*ys~3*t~11,32) ys=md(9*ys~3*xs~5*t~7,32) C << [xs,ys] end 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 0...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 end 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) end b << p end s=0 for i in 0...8 s=s~b[i]*(2**i) end D << [x,y,o,s,b] end S=[[]] E=Set.new A=[] R=0 Q=0 while A.length<14 and S.length>0 p=S.pop l=p.length matches=[] for t in 0...36 if D[t][4][0,l]==p matches << t end end if matches.length==0 R=R~1 Q=md(17*Q~31*l~7*R~3,9973) else t=matches[0] if E.include?(t) R=R~1 Q=md(17*Q~31*l~7*R~5*t~4,9973) else k=A.length A << t E.add(t) q=D[t] Q=md(17*Q~11*k~5*t~3*q[3]~q[2],9973) for i in 0...8 S << (q[4][0,i] ~ [1-q[4][i]]) end end end end print "ACCEPTED ",A,"\n" print "RC ",R," ",Q,"\n" K=Set.new for k in 0...A.length t=A[k] q=D[t] x=q[0] y=q[1] o=q[2] s=q[3] b=q[4] for m in 0...18 j=md(5*m~3,8) h=1~md(7*m~4,9) r=md(m,3) if r==0 z=md(o~h*(2*b[j]~1)~x,997) elsif r==1 z=md(o~h*(md(s,11)~1-b[j])~y~j,997) else z=md(o~h*(md(x~y~j,7))~3*b[j]~m,997) end e=0 if z!=o e=1 K.add(m) end Q=md(17*Q~19*k~23*m~3*z~29*e,9973) end end print "KILLED ",K.to_a.sort," ",K.length,"\n" print "FINAL ",R," ",K.length," ",Q,"\n" RB