#drzewo AVL

class Wezel:
	s,w,h,d=0,0,0,[]
	def aktualizuj(self):
		self.s = 1+self.d[0].s+self.d[1].s
		self.h = 1+max(self.d[0].s,self.d[1].s)
	def balans(self, k):
		return self.d[k].h - self.d[1-k].h

Null = Wezel()
Null.d = [Null, Null]

def dodaj(dR,k_dr, wartosc, poz):
	A = dR[k_dr]
	if A==Null:
		A = Wezel()
		A.s,A.w,A.h,A.d = 1, wartosc, 1, [Null, Null]
		dR[k_dr] = A
		return
	s0 = A.d[0].s
	if s0>=poz: k=0
	else: k, poz = 1, poz-s0-1
	dodaj(A.d, k, wartosc, poz)
	if A.balans(k)<=1:
		A.aktualizuj()
		return
	# naprawa wyważenia
	B = A.d[k]
	if B.balans(1-k)>=1:
		C = B.d[1-k]
		dR[k_dr],C.d[k],C.d[1-k],B.d[1-k],A.d[k] = C,B,A,C.d[k],C.d[1-k]
		A.aktualizuj()
		B.aktualizuj()
		C.aktualizuj()
	else:
		dR[k_dr],A.d[k],B.d[1-k] = B, B.d[1-k], A
		A.aktualizuj()
		B.aktualizuj()

def elementy(p):
	if p==Null:
		return []
	return elementy(p.d[0])+[p.w]+elementy(p.d[1])

def solve():
	nn = int(input())
	wejscie = [int(i) for i in input().split()]
	for i in range(nn):
		if wejscie[i]>i:
			print("NIE")
			return
	root = [Null]
	for i in range(nn):
		dodaj(root, 0, i, i-wejscie[i])
	odp = [0]*nn
	tt = elementy(root[0])
	for i in range(nn):
		odp[tt[i]] = i
	print(' '.join(str(i+1) for i in odp))

if __name__=="__main__":
	solve()
