#include <iostream>
#include <algorithm>
#include <random>
#include <iterator>
template<typename Iter>
void shuffle_range(Iter begin, Iter end)
{
static std::random_device rd;
std::default_random_engine rng(rd());
std::shuffle(begin, end, rng);
}
int main()
{
std::vector<int> data;
data.reserve(20);
std::generate_n(std::back_inserter(data), data.capacity(),
[]{ static int i=0; return ++i;});
std::copy(data.begin(), data.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
shuffle_range(data.begin(), data.end());
std::copy(data.begin(), data.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8aXRlcmF0b3I+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyPgp2b2lkIHNodWZmbGVfcmFuZ2UoSXRlciBiZWdpbiwgSXRlciBlbmQpCnsKICAgIHN0YXRpYyBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7CiAgICBzdGQ6OmRlZmF1bHRfcmFuZG9tX2VuZ2luZSBybmcocmQoKSk7CiAgICBzdGQ6OnNodWZmbGUoYmVnaW4sIGVuZCwgcm5nKTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IGRhdGE7CiAgICBkYXRhLnJlc2VydmUoMjApOwogICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcihkYXRhKSwgZGF0YS5jYXBhY2l0eSgpLAogICAgICAgICAgICAgICAgICAgIFtdeyBzdGF0aWMgaW50IGk9MDsgcmV0dXJuICsraTt9KTsKICAgIAogICAgc3RkOjpjb3B5KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQoKSwKICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgc2h1ZmZsZV9yYW5nZShkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOwogICAgCiAgICBzdGQ6OmNvcHkoZGF0YS5iZWdpbigpLCBkYXRhLmVuZCgpLAogICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiAiKSk7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQo=