from fractions import Fraction
import sys

sys.setrecursionlimit(10000)

def parse(inFile):
    return (inFile.getInt(), [z - 1 for z in inFile.getInts()])

def whatis(N, hs):
    xs = []
    for i in xrange(N - 1):
        rec = i + 1
        for j in xrange(i + 2, N):
            if (hs[j] - hs[i]) * (rec - i) > (hs[rec] - hs[i]) * (j - i):
                rec = j
        xs += [rec]
    return xs

def shift(k):
    n = len(k)
    return [(n - i) + k[i] for i in xrange(n)]

def slv(xs, i, j):
    if (i > j): return []
    if (i == j): return [0]
    return [0] + shift(slv(xs, i + 1, xs[i] - 1)) + slv(xs, xs[i], j)

def solve((N, xs)):
    for j in xrange(N - 1):
        for k in xrange(j + 1, xs[j]):
            if xs[k] > xs[j]:
                return "Impossible"
    hs = slv(xs, 0, N - 1)
    mh = max(hs)
    hs = [mh - i for i in hs]
    return " ".join(["%d" % h for h in hs])

if __name__ == "__main__":
    from GCJ import GCJ
    GCJ(parse, solve, "/Users/lpebody/gcj/2012_2/c", "C").run()
