1208_D. Restore Permutation
An array of integers p_{1},p_{2}, …,p_{n} is called a permutation if it contains each number from 1 to n exactly once. For example, the following arrays are permutations: [3,1,2], [1], [1,2,3,4,5] and [4,3,1,2]. The following arrays are not permutations: [2], [1,1], [2,3,4].

There is a hidden permutation of length n.

For each index i, you are given s_{i}, which equals to the sum of all p_{j} such that j < i and p_{j} < p_{i}. In other words, s_i is the sum of elements before the i-th element that are smaller than the i-th element.

Your task is to restore the permutation.

Input

The first line contains a single integer n (1 ≤ n ≤ 2 ⋅ 10^{5}) — the size of the permutation.

The second line contains n integers s_{1}, s_{2}, …, s_{n} (0 ≤ s_{i} ≤ (n(n-1))/(2)).

It is guaranteed that the array s corresponds to a valid permutation of length n.

Output

Print n integers p_{1}, p_{2}, …, p_{n} — the elements of the restored permutation. We can show that the answer is always unique.

Examples

Input


3
0 0 0


Output


3 2 1


Input


2
0 1


Output


1 2


Input


5
0 1 1 1 10


Output


1 4 3 2 5

Note

In the first example for each i there is no index j satisfying both conditions, hence s_i are always 0.

In the second example for i = 2 it happens that j = 1 satisfies the conditions, so s_2 = p_1.

In the third example for i = 2, 3, 4 only j = 1 satisfies the conditions, so s_2 = s_3 = s_4 = 1. For i = 5 all j = 1, 2, 3, 4 are possible, so s_5 = p_1 + p_2 + p_3 + p_4 = 10.
```python
from sys import stdin,stdout

class Tree(object):
    def __init__(self,n):
        self.tree=[0]*(4*n+10)
        self.b=[0]*(n+10)
        self.a=list(map(int,stdin.readline().split()))
        self.n=n
    def update(self,L,C,l,r,rt):
        if l==r:
            self.tree[rt]+=C
            return
        mid=(l+r)//2
        if L<=mid:
            self.update(L,C,l,mid,rt<<1)
        else:
            self.update(L,C,mid+1,r,rt<<1|1)
        self.tree[rt]=self.tree[rt<<1]+self.tree[rt<<1|1]


    def query(self,s,l,r,rt):
        if l==r:
            return l
        mid=(l+r)//2
        if self.tree[rt<<1]>s:
            return self.query(s,l,mid,rt<<1)
        else:
            return self.query(s-self.tree[rt<<1],mid+1,r,rt<<1|1)
    def slove(self):

        for i in range(n):
            self.update(i+1,i+1,1,n,1)
        for i in range(n,0,-1):
            self.b[i]=self.query(self.a[i-1],1,n,1)
            self.update(self.b[i],-self.b[i],1,n,1)
        for i in range(n):
            stdout.write('%d '%(self.b[i+1]))




if __name__ == '__main__':
    n=int(stdin.readline())
    seg=Tree(n)
    seg.slove()
```