#include <algorithm>
#include <iterator>
#include <iostream>
auto generator = [](unsigned seed)
{
struct RandomNumberGenerator
{
explicit RandomNumberGenerator(unsigned s): seed(s) {}
int front()
{
return ((seed / 0x10000) * seed) >> 16;
}
void popFront()
{
seed = seed * 1103515245 + 12345;
}
bool empty() { return false; }
private:
unsigned seed;
};
return RandomNumberGenerator(seed);
};
int main()
{
auto g = generator(5);
std::generate_n(std::ostream_iterator<int>(std::cout, "\t"), 10, [&](){ return g.popFront(), g.front(); });
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CgphdXRvIGdlbmVyYXRvciA9IFtdKHVuc2lnbmVkIHNlZWQpCnsKICBzdHJ1Y3QgUmFuZG9tTnVtYmVyR2VuZXJhdG9yCiAgewogIAlleHBsaWNpdCBSYW5kb21OdW1iZXJHZW5lcmF0b3IodW5zaWduZWQgcyk6IHNlZWQocykge30KICAJCiAgICBpbnQgZnJvbnQoKQogICAgewogICAgICByZXR1cm4gKChzZWVkIC8gMHgxMDAwMCkgKiBzZWVkKSA+PiAxNjsKICAgIH0KIAogICAgdm9pZCBwb3BGcm9udCgpCiAgICB7CiAgICAgIHNlZWQgPSBzZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1OwogICAgfQogCiAgICBib29sIGVtcHR5KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgIAogIHByaXZhdGU6CiAgICB1bnNpZ25lZCBzZWVkOwogIH07CiAKICByZXR1cm4gUmFuZG9tTnVtYmVyR2VuZXJhdG9yKHNlZWQpOwp9OwoKaW50IG1haW4oKQp7CglhdXRvIGcgPSBnZW5lcmF0b3IoNSk7CgkKCXN0ZDo6Z2VuZXJhdGVfbihzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICJcdCIpLCAxMCwgWyZdKCl7IHJldHVybiBnLnBvcEZyb250KCksIGcuZnJvbnQoKTsgfSk7Cn0=