package main
import (
"bufio"
"fmt"
"os"
)
type Fenwick struct {
tree []int64
n int
}
func NewFenwick(size int) *Fenwick {
return &Fenwick{tree: make([]int64, size+2), n: size}
}
func (f *Fenwick) update(idx int, val int64) {
for idx <= f.n {
f.tree[idx] += val
idx += idx & -idx
}
}
func (f *Fenwick) query(idx int) int64 {
var sum int64 = 0
for idx > 0 {
sum += f.tree[idx]
idx -= idx & -idx
}
return sum
}
func main() {
in := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(in, &n)
s := make([]int64, n+1)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &s[i])
}
sumFT := NewFenwick(n)
countFT := NewFenwick(n)
for i := 1; i <= n; i++ {
countFT.update(i, 1)
}
p := make([]int, n+1)
for i := n; i >= 1; i-- {
low := 1
high := n
for low < high {
mid := (low + high) / 2
t := int64(mid-1) * int64(mid) / 2
sumlt := sumFT.query(mid-1)
gg := t - s[i] - sumlt
if gg >= 0 {
high = mid
} else {
low = mid + 1
}
}
q0 := low
low = q0
high = n
for low < high {
mid := (low + high) / 2
cnt := countFT.query(mid) - countFT.query(q0-1)
if cnt >= 1 {
high = mid
} else {
low = mid + 1
}
}
r := low
p[i] = r
sumFT.update(r, int64(r))
countFT.update(r, -1)
}
for i := 1; i <= n; i++ {
fmt.Print(p[i])
if i < n {
fmt.Print(" ")
} else {
fmt.Println()
}
}
}