SUB perms (n) DIM p((n + 1) * 4) FOR i = 1 TO n p(i) = -i NEXT i s = 1 DO PRINT "Perm: ("; FOR i = 1 TO n PRINT ABS(p(i)); ""; NEXT i PRINT ") Sign: "; s k = 0 FOR i = 2 TO n IF p(i) < 0 AND (ABS(p(i)) > ABS(p(i - 1))) AND (ABS(p(i)) > ABS(p(k))) THEN k = i NEXT i FOR i = 1 TO n - 1 IF p(i) > 0 AND (ABS(p(i)) > ABS(p(i + 1))) AND (ABS(p(i)) > ABS(p(k))) THEN k = i NEXT i IF k THEN FOR i = 1 TO n 'reverse elements > k IF ABS(p(i)) > ABS(p(k)) THEN p(i) = -p(i) NEXT i 'if p(k) < 0 then i = k-1 else i = k+1 i = k + SGN(p(k)) SWAP p(k), p(i) 'temp = p(k) 'p(k) = p(i) 'p(i) = temp s = -s END IF LOOP UNTIL k = 0 END SUB perms (3) PRINT perms (4)