let rand = new System.Random()
let swap x y (a: 'a []) =
    let tmp = a.[x]
    a.[x] <- a.[y]
    a.[y] <- tmp
// shuffle an array (in-place)
let shuffle a =
    Array.iteri (fun i _ -> a |> swap i (rand.Next(i, Array.length a)))