1392_F. Omkar and Landslide
Omkar is standing at the foot of Celeste mountain. The summit is n meters away from him, and he can see all of the mountains up to the summit, so for all 1 ≤ j ≤ n he knows that the height of the mountain at the point j meters away from himself is h_j meters. It turns out that for all j satisfying 1 ≤ j ≤ n - 1, h_j < h_{j + 1} (meaning that heights are strictly increasing).

Suddenly, a landslide occurs! While the landslide is occurring, the following occurs: every minute, if h_j + 2 ≤ h_{j + 1}, then one square meter of dirt will slide from position j + 1 to position j, so that h_{j + 1} is decreased by 1 and h_j is increased by 1. These changes occur simultaneously, so for example, if h_j + 2 ≤ h_{j + 1} and h_{j + 1} + 2 ≤ h_{j + 2} for some j, then h_j will be increased by 1, h_{j + 2} will be decreased by 1, and h_{j + 1} will be both increased and decreased by 1, meaning that in effect h_{j + 1} is unchanged during that minute.

The landslide ends when there is no j such that h_j + 2 ≤ h_{j + 1}. Help Omkar figure out what the values of h_1, ..., h_n will be after the landslide ends. It can be proven that under the given constraints, the landslide will always end in finitely many minutes.

Note that because of the large amount of input, it is recommended that your code uses fast IO.

Input

The first line contains a single integer n (1 ≤ n ≤ 10^6). 

The second line contains n integers h_1, h_2, ..., h_n satisfying 0 ≤ h_1 < h_2 < ... < h_n ≤ 10^{12} — the heights.

Output

Output n integers, where the j-th integer is the value of h_j after the landslide has stopped.

Example

Input


4
2 6 7 8


Output


5 5 6 7

Note

Initially, the mountain has heights 2, 6, 7, 8.

In the first minute, we have 2 + 2 ≤ 6, so 2 increases to 3 and 6 decreases to 5, leaving 3, 5, 7, 8.

In the second minute, we have 3 + 2 ≤ 5 and 5 + 2 ≤ 7, so 3 increases to 4, 5 is unchanged, and 7 decreases to 6, leaving 4, 5, 6, 8.

In the third minute, we have 6 + 2 ≤ 8, so 6 increases to 7 and 8 decreases to 7, leaving 4, 5, 7, 7.

In the fourth minute, we have 5 + 2 ≤ 7, so 5 increases to 6 and 7 decreases to 6, leaving 4, 6, 6, 7.

In the fifth minute, we have 4 + 2 ≤ 6, so 4 increases to 5 and 6 decreases to 5, leaving 5, 5, 6, 7.

In the sixth minute, nothing else can change so the landslide stops and our answer is 5, 5, 6, 7.
```python
import os
import sys
from io import BytesIO, IOBase
# region fastio
BUFSIZE = 8192
class FastIO(IOBase):
    newlines = 0
    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None
    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()
    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()
    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)

class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
def bsearch(mn, mx, func):
    #func(i)=False を満たす最大のi (mn<=i<mx)
    idx = (mx + mn)//2
    while mx-mn>1:
        if func(idx):
            idx, mx = (idx + mn)//2, idx
            continue
        idx, mn = (idx + mx)//2, idx
    return idx

N, = map(int, input().split())
X = list(map(int, input().split()))
sX = sum(X)
d = X[0]
if sX >= N*(N-1)//2:
    tmp = sX-N*(N-1)//2
    d = max(tmp//N, d)
m = sX - d*N
for i in range(N):
    X[i] = d
i=bsearch(0,N,lambda i : i*(i+1)//2>=m)
i+=1
for j in range(i-1):
    X[N-1-j]+=i-j-1
k=m-i*(i-1)//2
for j in range(k):
    X[N-i+j]+=1
print(" ".join(map(str, X)))

```