#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+CgphdXRvIGdlbmVyYXRvcih1bnNpZ25lZCBzZWVkKQp7CiAgc3RydWN0IFJhbmRvbU51bWJlckdlbmVyYXRvcgogIHsKICAJZXhwbGljaXQgUmFuZG9tTnVtYmVyR2VuZXJhdG9yKHVuc2lnbmVkIHMpOiBzZWVkKHMpIHt9CiAgCQogICAgaW50IGZyb250KCkKICAgIHsKICAgICAgcmV0dXJuICgoc2VlZCAvIDB4MTAwMDApICogc2VlZCkgPj4gMTY7CiAgICB9CiAKICAgIHZvaWQgcG9wRnJvbnQoKQogICAgewogICAgICBzZWVkID0gc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKICAgIH0KIAogICAgYm9vbCBlbXB0eSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAKICBwcml2YXRlOgogICAgdW5zaWduZWQgc2VlZDsKICB9OwogCiAgcmV0dXJuIFJhbmRvbU51bWJlckdlbmVyYXRvcihzZWVkKTsKfQoKaW50IG1haW4oKQp7CglhdXRvIGcgPSBnZW5lcmF0b3IoNSk7CgkKCXN0ZDo6Z2VuZXJhdGVfbihzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICJcdCIpLCAxMCwgWyZdKCl7IHJldHVybiBnLnBvcEZyb250KCksIGcuZnJvbnQoKTsgfSk7Cn0=