#B-drzewo, drzewo 2-3-4
class Wezel:
	s,w,n=0,None,None
	def aktualizuj(self):
		self.s = len(self.w)
		if self.n!=None:
			self.s += sum(i.s for i in self.n)

def dodaj(p,c,wartosc, poz):
	if len(c.w)==3:
		c,poz = podzial(p,c,poz)
	c.s+=1
	if c.n==None:
		c.w.insert(poz, wartosc)
		return
	for n in c.n:
		if n.s>=poz:
			dodaj(c,n,wartosc, poz)
			return
		poz -= n.s+1

def podzial(p,c,poz):
	if p==None:
		cl,cp = Wezel(),Wezel()
		cl.w,c.w,cp.w = c.w[0:1], c.w[1:2],c.w[2:]
		if c.n!=None:
			cl.n,cp.n = c.n[:2],c.n[2:]
		c.n=[cl,cp]
		cl.aktualizuj()
		cp.aktualizuj()
		return c, poz
	cl,cp = Wezel(),c
	g = p.n.index(c)
	p.n.insert(g, cl)
	p.w.insert(g, c.w[1])
	cl.w,cp.w = c.w[0:1], c.w[2:]
	if c.n!=None:
		cl.n,cp.n = c.n[:2],c.n[2:]
	cl.aktualizuj()
	cp.aktualizuj()
	if cl.s>=poz: return cl, poz
	return cp, poz-cl.s-1

def elementy(p):
	if p.n==None:
		return p.w
	odp = []
	for i in range(len(p.w)):
		odp += elementy(p.n[i])
		odp.append(p.w[i])
	odp += elementy(p.n[-1])
	return odp

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 = Wezel()
	root.w = []
	for i in range(nn):
		dodaj(None, root, i, i-wejscie[i])
	odp = [0]*nn
	tt = elementy(root)
	for i in range(nn):
		odp[tt[i]] = i
	print(' '.join(str(i+1) for i in odp))

if __name__=="__main__":
	solve()
