fun generate(n: Int, a: MutableList, callback: (MutableList) -> Unit) { if (n == 1) { callback(a) } else { val nIsEven = n % 2 == 0 for (i in 0..(n - 2)) { generate(n - 1, a, callback) a.swap(n - 1, if (nIsEven) i else 0) } generate(n - 1, a, callback) } }