#include <bits/stdc++.h>   using namespace std;   const long long B = 360;   const long long N = 100005;   long long block(long long x) { return x / B; }   long long offset(long long x) { return x % B; }   deque<long long> a[B];   signed c[B][N];   long long n, q;   signed main() {     ios::sync_with_stdio(false);     cin >> n;     for (long long i = 0; i < n; i++) {       long long x;       cin >> x;       a[block(i)].push_back(x);       c[block(i)][x]++;     }     cin >> q;     long long lastans = 0;     for (long long i = 0; i < q; i++) {       long long op, l, r, k;       cin >> op >> l >> r;       l = (l + lastans - 1) % n;       r = (r + lastans - 1) % n;       if (l > r) swap(l, r);       if (op == 2) cin >> k;       k = (k + lastans - 1) % n + 1;       long long L = block(l);       long long R = block(r);       l = offset(l);       r = offset(r);       if (op == 1) {         if (L == R) {           long long x = a[R][r];           a[R].erase(a[R].begin() + r);           a[L].insert(a[L].begin() + l, x);         } else {           for (long long i = L; i < R; i++) {             long long x = a[i].back();             a[i].pop_back();             c[i][x]--;             c[i + 1][x]++;             a[i + 1].push_front(x);           }           long long x = a[R][r + 1];           a[R].erase(a[R].begin() + r + 1);           a[L].insert(a[L].begin() + l, x);           c[R][x]--;           c[L][x]++;         }       } else {         long long ans = 0;         if (L == R) {           for (long long i = l; i <= r; i++) ans += a[L][i] == k;         } else {           for (long long i = l; i < a[L].size(); i++) ans += a[L][i] == k;           for (long long i = 0; i <= r; i++) ans += a[R][i] == k;           for (long long i = L + 1; i <= R - 1; i++) ans += c[i][k];         }         cout << (lastans = ans) << endl;       }     }   }   