package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
n := readInt(in)
V := make([]int, n)
for i := 0; i < n; i++ {
V[i] = readInt(in) - 1
}
diff1 := make([]int, n+1)
diff_1 := make([]int, n+1)
for i := 0; i < n; i++ {
v := V[i]
length := n - 1 - v
if length <= 0 {
continue
}
L1 := (v + 1 - i) % n
if L1 < 0 {
L1 += n
}
R1 := (n - 1 - i) % n
if R1 < 0 {
R1 += n
}
if L1 <= R1 {
diff1[L1]++
diff1[R1+1]--
} else {
diff1[L1]++
diff1[n]--
diff1[0]++
diff1[R1+1]--
}
L_1 := (v + 1 + i) % n
if L_1 < 0 {
L_1 += n
}
R_1 := (n - 1 + i) % n
if R_1 < 0 {
R_1 += n
}
if L_1 <= R_1 {
diff_1[L_1]++
diff_1[R_1+1]--
} else {
diff_1[L_1]++
diff_1[n]--
diff_1[0]++
diff_1[R_1+1]--
}
}
for i := 1; i < n; i++ {
diff1[i] += diff1[i-1]
diff_1[i] += diff_1[i-1]
}
q := readInt(in)
D := 1
O := 0
fmt.Fprintln(out, diff1[O])
for j := 0; j < q; j++ {
typ := readInt(in)
if typ == 1 {
k := readInt(in)
O = (O - k) % n
if O < 0 {
O += n
}
} else if typ == 2 {
k := readInt(in)
O = (O + k) % n
} else if typ == 3 {
D = -D
O = (n - 1 - O) % n
if O < 0 {
O += n
}
}
if D == 1 {
fmt.Fprintln(out, diff1[O])
} else {
fmt.Fprintln(out, diff_1[O])
}
}
}
func readInt(in *bufio.Reader) int {
n := 0
sign := 1
for {
b, err := in.ReadByte()
if err != nil {
return n * sign
}
if b == '-' {
sign = -1
continue
}
if b >= '0' && b <= '9' {
n = n*10 + int(b-'0')
break
}
}
for {
b, err := in.ReadByte()
if err != nil || b < '0' || b > '9' {
break
}
n = n*10 + int(b-'0')
}
return n * sign
}