link lists procedure main() A := [8,24,52,100,1020,1024,10000] every len := !A do { deck := [: 1 to len :] tmpd := copy(deck) cnt := 0 while (cnt +:= 1, tmpd := shuffledeck(tmpd)) do if lequiv(deck,tmpd) then break write("For deck of size ",len," it takes ",cnt," perfect shuffles.") } end procedure shuffledeck(d) c1 := create !d[1+:*d/2] c2 := create !d[*d/2+1:0] d := [] while (put(d,@c1),put(d,@c2)) return d end