procedure main(A) every p := permute(A) do every writes((!p||" ")|"\n") end procedure permute(A) if *A <= 1 then return A suspend [(A[1]<->A[i := 1 to *A])] ||| permute(A[2:0]) end