-V MAX = 12 [Char] sp V count = [0] * MAX V pos = 0 F factSum(n) V s = 0 V x = 0 V f = 1 L x < n f *= ++x s += f R s F r(n) I n == 0 R 0B V c = :sp[:pos - n] I --:count[n] == 0 :count[n] = n I !r(n - 1) R 0B :sp[:pos++] = c R 1B F superPerm(n) :pos = n V len = factSum(n) I len > 0 :sp = [Char("\0")] * len L(i) 0 .. n :count[i] = i L(i) 1 .. n :sp[i - 1] = Char(code' ‘0’.code + i) L r(n) {} L(n) 0 .< MAX superPerm(n) print(‘superPerm(#2) len = #.’.format(n, sp.len))