sub random_derangement { my @i = shuffle( 0 .. $#_ ); my @r; @r[ @i ] = @_[ @i[1..$#i], $i[0] ]; @r }