Problem: You are given a sequence D_1, D_2, ..., D_N of length N. The values of D_i are all distinct. Does a tree with N vertices that satisfies the following conditions exist?

* The vertices are numbered 1,2,..., N.
* The edges are numbered 1,2,..., N-1, and Edge i connects Vertex u_i and v_i.
* For each vertex i, the sum of the distances from i to the other vertices is D_i, assuming that the length of each edge is 1.



If such a tree exists, construct one such tree.

Constraints

* 2 \leq N \leq 100000
* 1 \leq D_i \leq 10^{12}
* D_i are all distinct.

Input

Input is given from Standard Input in the following format:


N
D_1
D_2
:
D_N


Output

If a tree with n vertices that satisfies the conditions does not exist, print `-1`.

If a tree with n vertices that satisfies the conditions exist, print n-1 lines. The i-th line should contain u_i and v_i with a space in between. If there are multiple trees that satisfy the conditions, any such tree will be accepted.

Examples

Input

7
10
15
13
18
11
14
19


Output

1 2
1 3
1 5
3 4
5 6
6 7


Input

2
1
2


Output

-1


Input

15
57
62
47
45
42
74
90
75
54
50
66
63
77
87
51


Output

1 10
1 11
2 8
2 15
3 5
3 9
4 5
4 10
5 15
6 12
6 14
7 13
9 12
11 13

Solution (in PYTHON3):

Solution:

"""
Writer: SPD_9X2
https://atcoder.jp/contests/arc103/tasks/arc103_d

面白そう！
とっかかりはどのへんだろうか

偶奇あたりから考えてみる？
まず、A→BとA←B　の距離は等しいので、Dの合計は絶対偶数になる
Dの和が奇数なら構築不可能

辺u,vを取り除いて,2つの部分木に分解する、各木の含む頂点数を x[u],x[v]とすると
D[u]+x[u] == D[v]+x[v]　となる (x[u] + x[v] == N)

最大のDについて考えてみよう
最大のDから繋がってる点を根とした部分木は少なくとも半分の数の要素を含む
なので、Dmaxは2つ以上辺を持っていてはいけない→Dmaxは葉

Dmaxを置くと、それとつながる要素のdは1意に定まる
残り(unused)の頂点の内、最大のを考える。
こいつももう葉になるしかない
1意に定まりんぐ

ん～？
こんな感じで大を小につけていけば構築完了するんじゃね？
小-大-小　となることはない(小の成分は半分以上の点を含むため)　なのでおｋそう！

D[u] > D[v]のとき
D[v] = D[u] + x[u] - x[v]
x[v] = N-x[u]なので
D[v] = D[u] + 2*x[u] - N

だめな理由がわからないが…
可能性1: 大が2つ以上の小に繋がってる場合がある(可能を-1にしてる)
可能性2: 実は構築したやつが条件を満たしてない(-1を可能にしてる)
→どっちもそんなこと無さそうなのに…

====テストケースを見たら2っぽさそう====
可能性2の方をつぶそう
→連結じゃない？自分より小さいdにすべて繋いでるんだからそんなことないだろ

じゃあ場合によってはxが違う？
→どんな場合よ？
→うーん？　最後に一応チェック機構入れるか
→つまりジャッジを書く

簡易的に、xに問題が生じてそうなとき(根がNになってないとき)は-1にするようにしてみた
→xの数がちゃんと計算されていないわけではない？？

===kmjp氏のぶろぐ===
検算が必要？？なんで？
dの条件は必要条件であって十分条件ではないからか！
→むずいよ…
dの間に成り立つべき関係を書いただけで、d全部がずれてる可能性があると…

→つまり1頂点の付いて成立すればいいので、根のdを調べてあげればいいか
"""

import sys
N = int(input())

Dz = 0
Di = []
d_to_ind = {}

for i in range(N):
    d = int(input())
    if i == 0:
        Dz = d
    Di.append([d,i])
    d_to_ind[d] = i

Di.sort()
Di.reverse()

x = [1] * N
ans = []
lis = [ [] for i in range(N) ]

for lp in range(N-1):

    nowd,nowi = Di[lp]

    nexd = nowd + 2*x[nowi] - N

    if nexd >= nowd:
        print (-1)
        sys.exit()

    if nexd not in d_to_ind:
        print (-1)
        sys.exit()

    nexi = d_to_ind[nexd]
    x[nexi] += x[nowi]
    ans.append([nowi+1,nexi+1])
    lis[nowi].append(nexi)
    lis[nexi].append(nowi)

#ジャッジを書く(1頂点について成立すればおｋ)
from collections import deque
q = deque([0])
dis = [float("inf")] * N
dis[0] = 0
while len(q) > 0:
    now = q.popleft()
    for nex in lis[now]:
        if dis[nex] > dis[now]:
            dis[nex] = dis[now] + 1
            q.append(nex)

if sum(dis) != Dz:
    print (-1)
    sys.exit()

for i in range(N-1):

    print (ans[i][0] , ans[i][1])