func_code_string: #include <bits/stdc++.h>   using namespace std;   deque<int> a[355];   int n, m, S, Q, z, L, R, k, l, r, x, c[355][100005];   int ans;   void deal(int &x) { x = (x + ans - 1) % n + 1; }   int main() {     scanf( %d , &n);     S = int(sqrt(n)), m = n / S + 1;     for (int i = 0; i < n; i++) {       scanf( %d , &x);       a[i / S].push_back(x);       c[i / S][x]++;     }     scanf( %d , &Q);     while (Q--) {       scanf( %d%d%d , &z, &L, &R);       deal(L), deal(R);       if (L > R) swap(L, R);       L--, l = L / S, r = R / S;       if (z == 2) {         scanf( %d , &k);         deal(k);         ans = 0;         if (l == r) {           for (int i = L % S, _ = R % S; i < _; i++) ans += a[l][i] == k;         } else {           for (int i = l + 1; i < r; i++) ans += c[i][k];           for (int i = L % S, _ = a[l].size(); i < _; i++) ans += a[l][i] == k;           for (int i = 0, _ = R % S; i < _; i++) ans += a[r][i] == k;         }         printf( %d n , ans);       } else {         if (l == r) {           R = R % S - 1, x = a[r][R], a[r].erase(a[r].begin() + R);           a[l].insert(a[l].begin() + L % S, x);         } else {           for (int i = l; i < r;) {             x = a[i].back(), a[i].pop_back(), c[i][x]--, i++;             a[i].push_front(x), c[i][x]++;           }           R %= S, x = a[r][R], a[r].erase(a[r].begin() + R), c[r][x]--;           a[l].insert(a[l].begin() + L % S, x), c[l][x]++;         }       }     }     return 0;   }   