template<typename CARD>

void shuffle(CARD deck[], int card_count)

{

    int count = card_count - 1;

    while(deck[count--] = count, count);

    deck[0] = CARD(0);

    while(card_count)

    {

        CARD temp = deck[card_count - 1];

        int select = rand() % card_count--;

        deck[card_count] = deck[select];

        deck[select] = temp;

    }

}