def solve():
	nn = int(input())
	dane = [int(i) for i in input().split()]
	for i,v in enumerate(dane): 
		if v>i:
			print("NIE")
			return
	agr = [] # drzewo przedziałowe (dane zagregowane)
	n,val = nn,1
	while n>1:
		agr.append([val]*n)
		n = (n+1)//2
		val *= 2
	agr.reverse()
	odp = [None] * nn
	for i,v in enumerate(reversed(dane)):
		val = nn-v
		nn -= 1
		pos = 0
		for a in agr: #wyszukanie i modyfikacja drzewa przedziałowego
			if a[pos]<val:
				val -= a[pos]
				pos += 1
			a[pos] -= 1
			pos *= 2
		odp[i] = str(pos//2+1)
	print(' '.join(reversed(odp)))

if __name__=="__main__":
	solve()
