Problem:
Score : 400 points

Problem Statement

Snuke has an empty sequence a.

He will perform N operations on this sequence.

In the i-th operation, he chooses an integer j satisfying 1 \leq j \leq i, and insert j at position j in a (the beginning is position 1).

You are given a sequence b of length N. Determine if it is possible that a is equal to b after N operations. If it is, show one possible sequence of operations that achieves it.

Constraints

All values in input are integers.

1 \leq N \leq 100

1 \leq b_i \leq N

Input

Input is given from Standard Input in the following format:

N
b_1 \dots b_N

Output

If there is no sequence of N operations after which a would be equal to b, print -1.
If there is, print N lines. In the i-th line, the integer chosen in the i-th operation should be printed. If there are multiple solutions, any of them is accepted.

Sample Input 1

3
1 2 1

Sample Output 1

1
1
2

In this sequence of operations, the sequence a changes as follows:

After the first operation: (1)

After the second operation: (1,1)

After the third operation: (1,2,1)

Sample Input 2

2
2 2

Sample Output 2

-1

2 cannot be inserted at the beginning of the sequence, so this is impossible.

Sample Input 3

9
1 1 1 2 2 1 2 3 2

Sample Output 3

1
2
2
3
1
2
2
1
1

Solution in Python (3.4.3) (judge verdict: Wrong Answer)

# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-

# -*- coding: utf-8 -*-

from sys import stdin

###########################################

############################################
#from sys import stdin
import numpy as np

# read data for n sequences.
n = stdin.readline().split()
data = stdin.readline().split()

out = []

token = 0

# check first data and return -1 if != 1
if int(data[0]) != 1:
    token = -1
else:    
    a=1
# print first data
#    out.append(1)

for i,x in enumerate(data):
    data[i]=int(x)
    
# split to multiple data.
x = 0
split = []
chunck = []
#while x < len(data):
for i,num in enumerate(data[x:]):
    if num == 1:
        if i == 0:
            chunck.append(num)
            continue
#            chunck = [1]
        split.append(chunck)
        chunck=[]
    chunck.append(num)        
#        x = i+1
if chunck != []:
    split.append(chunck)

for x in reversed(split):
    maxnum=max(x)
    if x == [1]:
        out.append(1)
    else:
        for i in range(1,maxnum+1):
            if i in x:
                count = x.count(i)
                if x.index(i) >= i-1:
                    for xx in range(count):
                        out.append(i)
                else:
                    token = -1

if token == -1:
    print(-1)
else:
    # print outputs
    for x in out:
        print(x)