#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e9 + 7;
deque<int> a[318];
int n;
int tot;
int typ, l, r, m;
int g[318][100001];
int ans;
int main() {
  cin >> n;
  int lo = sqrt(n);
  for (int i = 0; i < (n); i++) {
    int t;
    cin >> t;
    a[i / lo].push_back(t);
    g[i / lo][t]++;
  }
  cin >> tot;
  while (tot--) {
    cin >> typ >> l >> r;
    l = ((l + ans - 1) % n) + 1;
    r = ((r + ans - 1) % n) + 1;
    if (l > r) {
      swap(l, r);
    }
    l--;
    r--;
    int ll = l / lo;
    int rr = r / lo;
    if (typ & 1) {
      if (ll == rr) {
        int t = a[ll][r % lo];
        a[ll].erase(a[ll].begin() + r % lo);
        a[ll].insert(a[ll].begin() + l % lo, t);
      } else {
        int p = ll;
        while (p < rr) {
          int t = a[p].back();
          a[p].pop_back();
          g[p][t]--;
          p++;
          a[p].push_front(t);
          g[p][t]++;
        }
        int t = a[rr][r % lo + 1];
        a[rr].erase(a[rr].begin() + r % lo + 1);
        g[rr][t]--;
        a[ll].insert(a[ll].begin() + l % lo, t);
        g[ll][t]++;
      }
    } else {
      cin >> m;
      m = ((m + ans - 1) % n) + 1;
      ans = 0;
      if (ll == rr) {
        for (int i = l % lo; i <= r % lo; i++) {
          if (a[ll][i] == m) {
            ans++;
          }
        }
        cout << ans << endl;
      } else {
        for (int i = ll + 1; i < rr; i++) {
          ans += g[i][m];
        }
        for (int i = l % lo; i < a[ll].size(); i++) {
          if (a[ll][i] == m) {
            ans++;
          }
        }
        for (int i = 0; i <= r % lo; i++) {
          if (a[rr][i] == m) {
            ans++;
          }
        }
        cout << ans << endl;
      }
    }
  }
  return 0;
}
