// version 1.1.2 fun permute(input: List): List> { if (input.size == 1) return listOf(input) val perms = mutableListOf>() val toInsert = input[0] for (perm in permute(input.drop(1))) { for (i in 0..perm.size) { val newPerm = perm.toMutableList() newPerm.add(i, toInsert) perms.add(newPerm) } } return perms } fun main(args: Array) { val input = listOf('a', 'b', 'c', 'd') val perms = permute(input) println("There are ${perms.size} permutations of $input, namely:\n") for (perm in perms) println(perm) }