You are given circular array *a*<sub class="lower-index">0</sub>, *a*<sub class="lower-index">1</sub>, ..., *a*<sub class="lower-index">*n* - 1</sub>. There are two types of operations with it: 
 -  *inc*(*lf*, *rg*, *v*) — this operation increases each element on the segment [*lf*, *rg*] (inclusively) by *v*; -  *rmq*(*lf*, *rg*) — this operation returns minimal value on the segment [*lf*, *rg*] (inclusively). 
Assume segments to be circular, so if *n* = 5 and *lf* = 3, *rg* = 1, it means the index sequence: 3, 4, 0, 1.

Write program to process given sequence of operations.
The first line contains integer *n* (1 ≤ *n* ≤ 200000). The next line contains initial state of the array: *a*<sub class="lower-index">0</sub>, *a*<sub class="lower-index">1</sub>, ..., *a*<sub class="lower-index">*n* - 1</sub> ( - 10<sup class="upper-index">6</sup> ≤ *a*<sub class="lower-index">*i*</sub> ≤ 10<sup class="upper-index">6</sup>), *a*<sub class="lower-index">*i*</sub> are integer. The third line contains integer *m* (0 ≤ *m* ≤ 200000), *m* — the number of operartons. Next *m* lines contain one operation each. If line contains two integer *lf*, *rg* (0 ≤ *lf*, *rg* ≤ *n* - 1) it means *rmq* operation, it contains three integers *lf*, *rg*, *v* (0 ≤ *lf*, *rg* ≤ *n* - 1; - 10<sup class="upper-index">6</sup> ≤ *v* ≤ 10<sup class="upper-index">6</sup>) — *inc* operation.
class Node:
    def __init__(self, val, index):
        self.index = index
        self.val = val
        self.next = None

    def add_next_val(self, nd):
        self.next = nd


n = int(input())
a = list(map(int, input().split(' ')))

nds = []
for i in range(n):
    nds.append(Node(a[i], i))

for i in range(1, n+1):
    if i == n:
        nds[i-1].add_next_val(nds[0])
    else:
        nds[i-1].add_next_val(nds[i])


m = int(input())
for _ in range(m):
    op = list(map(int, input().split(' ')))

    size = len(op)
    if size == 2:
        lf = op[0]
        rg = op[1]

        min_val = 0
        node = nds[lf]
        min_val = node.val
        while True:
            node = node.next
            if node.val < min_val:
                min_val = node.val
            if node.index == rg:
                break

        print(min_val)
    else:
        lf = op[0]
        rg = op[1]
        v = op[2]

        node = nds[lf]
        node.val += v
        while True:
            node = node.next
            node.val += v
            if node.index == rg:
                break

	 	 					  			  			  	 			  	 	