#include <iostream>
#include <memory>
#include <numeric>
#include <random>
#include <unordered_map>
int main() {
constexpr std::size_t min = 12345;
constexpr std::size_t max = 87654321;
constexpr std::size_t size = 8;
std::random_device device;
std::mt19937 engine{device()};
std::unique_ptr<std::size_t[]> array{new std::size_t[size]};
std::unordered_map<std::size_t, std::size_t> map;
map.reserve(max - min - size + 1);
std::iota(array.get(), array.get() + size, min);
for (std::size_t i = 0; i != size; ++i) {
std::uniform_int_distribution<std::size_t> dist{i, max - min};
auto index = dist(engine);
std::swap(array[i], index < size
? array[index]
: map.insert({index, min + index}).first->second);
}
if (size != 0) {
std::cout << array[0];
for (size_t i = 1; i != size; ++i) std::cout << ", " << array[i];
std::cout << "\n";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CgppbnQgbWFpbigpIHsKICBjb25zdGV4cHIgc3RkOjpzaXplX3QgbWluID0gMTIzNDU7CiAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG1heCA9IDg3NjU0MzIxOwogIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBzaXplID0gODsKCiAgc3RkOjpyYW5kb21fZGV2aWNlIGRldmljZTsKICBzdGQ6Om10MTk5MzcgZW5naW5le2RldmljZSgpfTsKICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpzaXplX3RbXT4gYXJyYXl7bmV3IHN0ZDo6c2l6ZV90W3NpemVdfTsKICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzaXplX3QsIHN0ZDo6c2l6ZV90PiBtYXA7CgogIG1hcC5yZXNlcnZlKG1heCAtIG1pbiAtIHNpemUgKyAxKTsKICBzdGQ6OmlvdGEoYXJyYXkuZ2V0KCksIGFycmF5LmdldCgpICsgc2l6ZSwgbWluKTsKCiAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpIHsKICAgIHN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPHN0ZDo6c2l6ZV90PiBkaXN0e2ksIG1heCAtIG1pbn07CiAgICBhdXRvIGluZGV4ID0gZGlzdChlbmdpbmUpOwogICAgc3RkOjpzd2FwKGFycmF5W2ldLCBpbmRleCA8IHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaW5kZXhdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1hcC5pbnNlcnQoe2luZGV4LCBtaW4gKyBpbmRleH0pLmZpcnN0LT5zZWNvbmQpOwogIH0KCiAgaWYgKHNpemUgIT0gMCkgewogICAgc3RkOjpjb3V0IDw8IGFycmF5WzBdOwogICAgZm9yIChzaXplX3QgaSA9IDE7IGkgIT0gc2l6ZTsgKytpKSBzdGQ6OmNvdXQgPDwgIiwgIiA8PCBhcnJheVtpXTsKICAgIHN0ZDo6Y291dCA8PCAiXG4iOwogIH0KfQo=