global list[] rlist[][] . proc permlist k . if k >= len list[] for i to len list[] if i = list[i] : return . rlist[][] &= list[] return . for i = k to len list[] swap list[i] list[k] permlist k + 1 swap list[k] list[i] . . # proc derang n &r[][] . rlist[][] = [ ] list[] = [ ] for i to n : list[] &= i permlist 1 r[][] = rlist[][] . r[][] = [ ] derang 4 r[][] print r[][] # func subfac n . if n < 2 : return 1 - n return (subfac (n - 1) + subfac (n - 2)) * (n - 1) . # print "counted / calculated" for n = 0 to 9 derang n r[][] print n & ": " & len r[][] & " " & subfac n .