func_code_string: #include <bits/stdc++.h>   inline long long pow(long long a, long long b, long long mod) {     long long ans = 1;     a %= mod;     for (; b; b >>= 1, a = a * a % mod)       if (b & 1) ans = ans * a % mod;     return ans;   }   struct Node {     int L, R;     mutable long long val;     Node(int L, int R = -1, long long val = 0) : L(L), R(R), val(val) {}     inline bool operator<(const Node& b) const { return L < b.L; }   };   std::set<Node> Chtholly;   inline std::set<Node>::iterator spilt(int pos) {     std::set<Node>::iterator iter = Chtholly.lower_bound(Node(pos));     if (iter != Chtholly.end() && iter->L == pos) return iter;     --iter;     int L = iter->L, R = iter->R;     long long V = iter->val;     Chtholly.erase(iter);     Chtholly.insert(Node(L, pos - 1, V));     return Chtholly.insert(Node(pos, R, V)).first;   }   inline void Add(int L, int R, long long val = 1) {     std::set<Node>::iterator end = spilt(R + 1), iter = spilt(L);     for (; iter != end; ++iter) iter->val += val;   }   inline void assign(int L, int R, long long val = 0) {     std::set<Node>::iterator terR = spilt(R + 1), terL = spilt(L);     Chtholly.erase(terL, terR);     Chtholly.insert(Node(L, R, val));   }   inline long long Rank(int L, int R, int k) {     std::vector<std::pair<long long, int> > s;     std::set<Node>::iterator end = spilt(R + 1), iter = spilt(L);     for (; iter != end; ++iter) {       s.push_back(std::pair<long long, int>(iter->val, iter->R - iter->L + 1));     }     std::sort(s.begin(), s.end());     for (auto iter : s) {       k -= iter.second;       if (k <= 0) return iter.first;     }     return -1ll;   }   inline long long Sum(int L, int R, long long k, long long mod) {     std::set<Node>::iterator end = spilt(R + 1), iter = spilt(L);     long long ans = 0;     for (; iter != end; ++iter) {       ans = (ans + 1ll * (iter->R - iter->L + 1) * pow(iter->val, k, mod) % mod) %             mod;     }     return ans;   }   long long n, m, seed, vmax;   const int MOD = 1e9 + 7;   inline long long rnd() {     long long ret = seed;     seed = (seed * 7 + 13) % MOD;     return ret;   }   signed main() {     int i;     scanf( %lld%lld%lld%lld , &n, &m, &seed, &vmax);     for (i = 1; i <= n; ++i) Chtholly.insert(Node(i, i, rnd() % vmax + 1));     Chtholly.insert(Node(n + 1, n + 1, 0));     for (i = 1; i <= m; ++i) {       int op = rnd() % 4 + 1, L = rnd() % n + 1, R = rnd() % n + 1, x, y;       if (L > R) L ^= R ^= L ^= R;       x = rnd() % (op == 3 ? R - L + 1 : vmax) + 1;       if (op == 4) y = rnd() % vmax + 1;       if (op == 1) {         Add(L, R, x);       }       if (op == 2) {         assign(L, R, x);       }       if (op == 3) {         printf( %lld n , Rank(L, R, x));       }       if (op == 4) {         printf( %lld n , Sum(L, R, x, y));       }     }   }   