#include <algorithm>
#include <cassert>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
// Fisher–Yates_shuffle
std::vector<int> FisherYatesShuffle(std::size_t size, std::size_t max_size, std::mt19937& gen)
{
assert(size < max_size);
std::vector<int> res(size);
for(std::size_t i = 0; i != max_size; ++i) {
std::uniform_int_distribution<> dis(0, i);
std::size_t j = dis(gen);
if (j < res.size()) {
if (i < res.size()) {
res[i] = res[j];
}
res[j] = i;
}
}
return res;
}
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::vector<int> b = FisherYatesShuffle(5, 25, gen);
std::copy(b.begin(), b.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8gRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZQpzdGQ6OnZlY3RvcjxpbnQ+IEZpc2hlcllhdGVzU2h1ZmZsZShzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBtYXhfc2l6ZSwgc3RkOjptdDE5OTM3JiBnZW4pCnsKICAgIGFzc2VydChzaXplIDwgbWF4X3NpemUpOwogICAgc3RkOjp2ZWN0b3I8aW50PiByZXMoc2l6ZSk7CgogICAgZm9yKHN0ZDo6c2l6ZV90IGkgPSAwOyBpICE9IG1heF9zaXplOyArK2kpIHsKICAgICAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjw+IGRpcygwLCBpKTsKICAgICAgICBzdGQ6OnNpemVfdCBqID0gZGlzKGdlbik7CiAgICAgICAgaWYgKGogPCByZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgIGlmIChpIDwgcmVzLnNpemUoKSkgewogICAgICAgICAgICAgICAgcmVzW2ldID0gcmVzW2pdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlc1tqXSA9IGk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnJhbmRvbV9kZXZpY2UgcmQ7CiAgICBzdGQ6Om10MTk5MzcgZ2VuKHJkKCkpOwogICAgc3RkOjp2ZWN0b3I8aW50PiBiID0gRmlzaGVyWWF0ZXNTaHVmZmxlKDUsIDI1LCBnZW4pOwoKICAgIHN0ZDo6Y29weShiLmJlZ2luKCksIGIuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiAiKSk7CiAgICByZXR1cm4gMDsKfQo=