/*
 *  Reverse and Rotate
 *
 */

template<class Bi> void reverse(Bi first, Bi last);
template<class Bi, class Out> Out reverse_copy(Bi first, Bi last, Out res);

template<class For> void rotate(For first, For middle, For last);
template<class For, class Out> Out rotate_copy(For first, For middle, For last, Out res);

template<class Ran> void random_shuffle(Ran first, Ran last);
template<class Ran, class Gen> void random_shuffle(Ran first, Ran last, Gen& g);


/*
 *  Usage
 *
 */

void f()
{
    string v[] = { "Frog", "and","Peach" };

    reverse(v,v+3);     // Peach and Frog
    rotate(v,v+1,v+3);  // and Frog Peach
}


void f(deque<Card>& dc)
{
        Urand r(52);
        random_shuffle(dc.begin(),dc.end(),r);
        // ...
}