#include using namespace std; int main() { struct generate { uint32_t x = 0, y = 1, z = 2, w = 3, seed; void reset() { x = seed; y = 1; z = 2; w = 3; } uint32_t operator()() { uint32_t t = (x ^ (x << 11)); x = y; y = z; z = w; w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)); return w; } } g; int64_t seed, n = 10000000; cin >> seed; g.seed = seed; int64_t l = 0, r = (1ll << 40); while (1 < r - l) { int64_t mid = (l + r) / 2; int count = 0; g.reset(); for (int i = 0; i <= n; i++) { if (g() <= mid) { count++; } } if (2 * count <= n) { l = mid; } else { r = mid; } } cout << r << endl; return 0; }