#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> b(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 < b.size()) {
if(i < j) {
b[i] = b[j];
}
b[j] = i;
}
}
return b;
}
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::vector<int> b = FisherYatesShuffle(10, 100, gen);
std::copy(b.begin(), b.end(), std::ostream_iterator<int>(std::cout, " "));
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNhc3NlcnQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8gRmlzaGVy4oCTWWF0ZXNfc2h1ZmZsZQpzdGQ6OnZlY3RvcjxpbnQ+IEZpc2hlcllhdGVzU2h1ZmZsZShzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBtYXhfc2l6ZSwgc3RkOjptdDE5OTM3JiBnZW4pCnsKICAgIGFzc2VydChzaXplIDwgbWF4X3NpemUpOwogICAgc3RkOjp2ZWN0b3I8aW50PiBiKHNpemUpOwoKICAgIGZvcihzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBtYXhfc2l6ZTsgKytpKSB7CiAgICAgICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248PiBkaXMoMCwgaSk7CiAgICAgICAgc3RkOjpzaXplX3QgaiA9IGRpcyhnZW4pOwogICAgICAgIGlmKGogPCBiLnNpemUoKSkgewogICAgICAgICAgICBpZihpIDwgaikgewogICAgICAgICAgICAgICAgYltpXSA9IGJbal07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYltqXSA9IGk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGI7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpyYW5kb21fZGV2aWNlIHJkOwogICAgc3RkOjptdDE5OTM3IGdlbihyZCgpKTsKICAgIHN0ZDo6dmVjdG9yPGludD4gYiA9IEZpc2hlcllhdGVzU2h1ZmZsZSgxMCwgMTAwLCBnZW4pOwoKICAgIHN0ZDo6Y29weShiLmJlZ2luKCksIGIuZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxpbnQ+KHN0ZDo6Y291dCwgIiAiKSk7CiAgICByZXR1cm4gMDsKfQo=