@0,1⦊fn permutate<T: Copy + Display>(xs: &mut [T], k: usize) {
let n = length(xs);
if k == n⦉@0,1 @2,4⦊{
display(xs);
}⦉@2,4 else if @3⦊k < n⦉@3 {
for @12,14,15,16,17,18⦊i⦉@12,14,15,16,17,18 in @5,7⦊k..n⦉@5,7 @12,14,15,16,17,18⦊{
swap(xs, i, k);
permutate(xs, k + 1);
swap(xs, i, k);
}⦉@12,14,15,16,17,18
} else @6,19⦊{
error();
}⦉@6,19
}@21⦊‸⦉@21