#!/usr/bin/env python3
n = int(input())
if n == 1: print(1, 1), exit()
points = [0] + [int(c) for c in input().split()]

# Construct MST
MST = [[] for i in range(n+1)]
point_dists = [(2*n, 0)]*(n+1) # A dictionary from point to (distance, closest_point_in_tree)
unvisited = set(range(1,n+1))

prev = 0
for i in range(n):
    bestp = -1 # Best unchosen point so far
    bestq = -1 # Closest chosen point
    bestv = 2*n+1   # Distance
    for i in unvisited:
        dist = min(point_dists[i], (abs(prev-i)+abs(points[prev]-points[i]), prev))
        point_dists[i] = dist
        if dist[0] < bestv:
            bestp = i
            bestv, bestq = dist
    MST[bestp].append(bestq)
    MST[bestq].append(bestp)
    prev = bestp
    unvisited.remove(bestp)

# Sort neighbors by angle

nexts = {}
for i in range(n+1):
    neighbors = MST[i]
    for j in range(len(neighbors)):
        nexts[(neighbors[j-1], i)] = (i, neighbors[j])

# Construct tour

visited = [False]*(n+1)
visited[0] = True
prev = 0
v,w = 0,MST[0][0]
for i in range(2*n+1):
    if not visited[w]:
        visited[w] = True
        print("%i %i" % (w,points[w]))
        prev = w
    v,w = nexts[(v,w)]
