public static void Shuffle<T>(this T[] array, Random random)
{
for (int i = array.Length - 1; i > 0; i--)
{
int dest = random.Next(i + 1);
T intermediate = array[i];
array[i] = array[dest];
array[dest] = intermediate;
}
}