Do you like summer? Residents of Berland do. They especially love eating ice cream in the hot summer. So this summer day a large queue of n Berland residents lined up in front of the ice cream stall. We know that each of them has a certain amount of berland dollars with them. The residents of Berland are nice people, so each person agrees to swap places with the person right behind him for just 1 dollar. More formally, if person a stands just behind person b, then person a can pay person b 1 dollar, then a and b get swapped. Of course, if person a has zero dollars, he can not swap places with person b.

Residents of Berland are strange people. In particular, they get upset when there is someone with a strictly smaller sum of money in the line in front of them.

Can you help the residents of Berland form such order in the line so that they were all happy? A happy resident is the one who stands first in the line or the one in front of who another resident stands with not less number of dollars. Note that the people of Berland are people of honor and they agree to swap places only in the manner described above.


-----Input-----

The first line contains integer n (1 ≤ n ≤ 200 000) — the number of residents who stand in the line.

The second line contains n space-separated integers a_{i} (0 ≤ a_{i} ≤ 10^9), where a_{i} is the number of Berland dollars of a man standing on the i-th position in the line. The positions are numbered starting from the end of the line. 


-----Output-----

If it is impossible to make all the residents happy, print ":(" without the quotes. Otherwise, print in the single line n space-separated integers, the i-th of them must be equal to the number of money of the person on position i in the new line. If there are multiple answers, print any of them.


-----Examples-----
Input
2
11 8

Output
9 10 
Input
5
10 9 7 10 6

Output
:(

Input
3
12 3 3

Output
4 4 10 


-----Note-----

In the first sample two residents should swap places, after that the first resident has 10 dollars and he is at the head of the line and the second resident will have 9 coins and he will be at the end of the line. 

In the second sample it is impossible to achieve the desired result.

In the third sample the first person can swap with the second one, then they will have the following numbers of dollars: 4 11 3, then the second person (in the new line) swaps with the third one, and the resulting numbers of dollars will equal to: 4 4 10. In this line everybody will be happy.

Difficulty: interview

Starter code:

Solutions:
import sys
class Person:
    def __init__(self, dollars, index):
        self.dollars = dollars
        self.index = index

def solve():
    n = int(input())
    given = list(map(int, input().split()))
    people = list()
    for i in range(n):
        people.append(Person(given[i], i))
    people.sort(key = lambda p: p.dollars + p.index)
    res = [0] * n
    for i in range(n):
        res[i] = people[i].dollars + people[i].index - i
    for i in range(n - 1):
        if res[i] > res[i+1]:
            return ":("
    return ' '.join(map(str, res))

    
def run():
    if sys.hexversion == 50594544 : sys.stdin = open("test.txt")
    print(solve())

run()

import sys
class Person:
    def __init__(self, dollars, index):
        self.dollars = dollars
        self.index = index

def solve():
    n = int(input())
    given = list(map(int, input().split()))
    people = list()
    for i in range(n):
        people.append(Person(given[i], i))
    people.sort(key = lambda p: p.dollars + p.index)
    res = [0] * n
    for i in range(n):
        res[i] = people[i].dollars + people[i].index - i
    for i in range(n - 1):
        if res[i] > res[i+1]:
            return ":("
    return ' '.join(map(str, res))

    
def run():
    if sys.hexversion == 50594544 : sys.stdin = open("test.txt")
    print(solve())

run()

import math,string,itertools,fractions,heapq,collections,re,array,bisect,copy
from itertools import chain, dropwhile, permutations, combinations
from collections import defaultdict, deque

def VI(): return list(map(int,input().split()))

def run(n,a):
    b = copy.copy(a)
    for i in range(n):
        b[i] -= (n-i)
    b.sort()
    for i in range(n):
        if i<n-1:
            if b[i]==b[i+1]:
                print(":(")
                return
        b[i] = str(b[i]+(n-i))
    print(" ".join(b))


def main(info=0):
    n = int(input())
    a = VI()
    run(n,a)

def __starting_point():
    main()

__starting_point()

N = int(input())
nums = list(map(int, input().split()))

for i in range(len(nums)):
    nums[i] += i

nums.sort()
for i in range(len(nums)):
    nums[i] -= i
    if i and nums[i] < nums[i-1]:
        print(":(")
        return

print(' '.join(list(map(str, nums))))


def main():
    n = int(input())
    a = [int(x) for x in input().split(" ")]
    for i in range(len(a)):
        a[i] += i
    a.sort()
    for i in range(1, len(a)):
        a[i] -= i
        if a[i] < a[i - 1]:
            print(":(")
            return
    for i in range(len(a)):
        a[i] = str(a[i])
    print(' '.join(a))


def __starting_point():
    main()

__starting_point()

R = lambda: list(map(int, input().split()))

n = R()[0]

a = R()

for i in range(n):
    a[i] += i
a = sorted(list(set(a)))
if len(a) != n:
    print(':(')
else:
    for i in range(n):
        print(a[i] - i, end=' ')


def main():
    n = int(input())
    a = [int(x) for x in input().split(" ")]
    for i in range(len(a)):
        a[i] += i
    a.sort()
    for i in range(1, len(a)):
        a[i] -= i
        if a[i] < a[i - 1]:
            print(":(")
            return
    for i in range(len(a)):
        a[i] = str(a[i])
    print(' '.join(a))


def __starting_point():
    main()
__starting_point()

def main():
    n = int(input())
    a = [int(x) for x in input().split(" ")]
    for i in range(len(a)):
        a[i] += i
    a.sort()
    for i in range(1, len(a)):
        a[i] -= i
        if a[i] < a[i-1]:
            print(":(")
            return
    for i in range(len(a)):
        a[i] = str(a[i])
    print(' '.join(a))

def __starting_point():
    main()
__starting_point()

input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))

input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


input()
t = sorted(q + i for i, q in enumerate(map(int, input().split())))
p = [q - i for i, q in enumerate(t)]
print(':(' if sorted(p) != p else ' '.join(map(str, p)))


n = int(input())
line = [int(i) for i in input().split()]

for i in range(len(line)):
    line[i]+=i
line.sort()
for i in range(len(line)):
    line[i]-=i

impossivel = False
for i in range(len(line)-1):
    if(line[i]>line[i+1]):
        impossivel = True
        break
if(impossivel):
    print(":(")
else:
    print(" ".join([str(i) for i in line]))


n = int(input())
line = [int(i) for i in input().split()]

for i in range(len(line)):
    line[i]+=i
line.sort()
for i in range(len(line)):
    line[i]-=i

impossivel = False
for i in range(len(line)-1):
    if(line[i]>line[i+1]):
        impossivel = True
        break
if(impossivel):
    print(":(")
else:
    print(" ".join([str(i) for i in line]))


n = int(input())
a = list(map(int,input().split()))

for i in range(n):
    a[i] += i
a = sorted(list(set(a)))
if n > len(a):
    print(':(')
else:
    for i in range(len(a)):
        a[i] -= i
    print (" ".join(map(str, a)))

n=int(input().strip())
a=list(map(int,input().strip().split()))
for i in range(n):
    a[i]=a[i]-(n-i)
a.sort()
for i in range(n):
    a[i]=a[i]+(n-i)
ans=True
for i in range(n-1):
    if (a[i]>a[i+1]):
        ans=False
        break
if (ans):
    for i in range(n):
        tmp=(' ' if (i!=n-1) else '\n')
        print(a[i],end=tmp)
else:
    print(":(")

#E - Happy Line
import sys
nLine = int(input())
nMoney = list(map(int, input().split()))
invariante = []
for i in range(len(nMoney)):
    invariante.append(nMoney[i] + i)
invariante.sort()

res = [0] * nLine
for i in range(nLine):
        res[i] = invariante[i] - i
for i in range(nLine - 1):
    if res[i] > res[i+1]:
        print(':(')
        return
print(*res)

#E - Happy Line
import sys
nLine = int(input())
nMoney = list(map(int, input().split()))
invariante = []
for i in range(len(nMoney)):
    invariante.append(nMoney[i] + i)
invariante.sort()

res = [0] * nLine
for i in range(nLine):
        res[i] = invariante[i] - i
for i in range(nLine - 1):
    if res[i] > res[i+1]:
        print(':(')
        return
print(*res)


n=int(input())
fila=list(map(int, input().split()))
break_ = False

for i in range(n):
  fila[i] += i 

fila = sorted(list(set(fila)))

if len(fila) < n:
  print(":(")

else:
  for j in range(n):
    fila[j] -= j

  print(" ".join(map(str, fila)))



n = int(input())
line = list(map(int, input().split()))

for i in range(n):
    line[i] += i

line.sort()

is_happy = True
for i in range(1, n):
    if line[i] == line[i - 1]:
        is_happy = False
        break

if is_happy:
    print(' '.join([str(line[i] - i) for i in range(n)]))
else:
    print(':(')


import math
import sys
input = sys.stdin.readline
n = int(input())
a = [int(_) for _ in input().split()]
for i in range(n):
    a[i] += i
a.sort()
for i in range(n):
    a[i] -= i
for i in range(n):
    if a[i] < 0 or (i > 0 and a[i - 1] > a[i]):
        print(':(')
        return
print(' '.join(map(str, a)))