let permute ?random_state t =
let state =
match random_state with
| None -> Random.get_state ()
| Some state -> state
in
for i = Array.length t downto 2 do
swap t (i - 1) (Random.State.int state i)
done;
if random_state = None then Random.set_state state