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.

-----Sample Input-----
7
10
15
13
18
11
14
19

-----Sample Output-----
1 2
1 3
1 5
3 4
5 6
6 7

The tree shown below satisfies the conditions.

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = '# -*- coding: utf-8 -*-\n""" outputの時間比較 """\nfrom sys import stdin, stdout\nimport numpy as np\n# import sys\n# sys.setrecursionlimit(10**4)\n\ndef _li(): return list(map(int, stdin.readline().split()))\ndef _li_(): return list([int(x)-1 for x in stdin.readline().split()])\ndef _lf(): return list(map(float, stdin.readline().split()))\ndef _ls(): return stdin.readline().split()\ndef _i(): return int(stdin.readline())\ndef _f(): return float(stdin.readline())\ndef _s(): return stdin.readline()[:-1]\nd_in = lambda: int(stdin.readline())  # N = d_in()\nds_in = lambda: list(map(int, stdin.readline().split()))  # List = ds_in()\ndef print_list(s):\n    stdout.write(\' \'.join(list(map(str, s))) + \'\\n\')\n    # stdout.flush()\ndef print_single(s):\n    stdout.write(str(s) + \'\\n\')\n    # stdout.flush()\n\n\n# N = _i()\n# D_list = np.array([_i() for _ in range(N)])\nN = d_in()\nD_list = np.array([d_in() for _ in range(N)])\n\n\nidx = np.argsort(D_list)\nsorted_D = D_list[idx]\nmapping = []\nfor j in idx:\n    mapping.append(j+1)\n\n# 解説を参考に実装\n# Dのスコアが大きい方から小さい方へ伸びる有向エッジとみなす\n# valueはノードから出ている有向エッジを切った場合の部分木の大きさ\nnodes = [1] * N\nans = []\ncost = [[0, 1] for _ in range(N)]\n# 葉っぱから見て，[エッジにたどり着くまでのコスト, 自分も含めた子ノードの数]\nfor i in range(N-1, 0, -1):\n    d = sorted_D[i]\n    sub = nodes[i]\n    target = d + 2*sub - N\n    cand = np.searchsorted(sorted_D[:i], target)\n    if (sorted_D[cand] != target) or (cand == i):\n        print((-1))\n        return\n    else:\n        ans.append((mapping[i], mapping[cand]))\n        nodes[cand] += nodes[i]\n        cost[cand][0] += (cost[i][0] + cost[i][1])\n        cost[cand][1] += cost[i][1]\n\n# 1番目のノードについてチェック\nif cost[0][0] != sorted_D[0]:\n    print((-1))\n    return\nelse:\n    for a in ans:\n        # print(a[0], a[1])\n        print_list(a)\n'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: