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;
            }
        }