#include <bits/stdc++.h>
using namespace std;
int n;
pair<int, int> par[100100];
int chain[200100];
int chain_size;
void add_edge(int u, int v) { cout << u << ' ' << v << endl; }
int main() {
  ios::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> par[i].first;
    par[i].second = i;
  }
  chain_size = n;
  sort(par + 1, par + n + 1);
  reverse(par + 1, par + n + 1);
  for (int i = 1; i <= n; i++) {
    chain[i] = (par[i].second * 2 - 1);
  }
  for (int i = 1; i < n; i++) {
    add_edge(chain[i], chain[i + 1]);
  }
  int i, k;
  for (int ii = 1; ii <= n; ii++) {
    i = par[ii].second;
    k = par[ii].first;
    if (ii + k - 1 < chain_size) {
      add_edge(chain[ii + k - 1], i * 2);
    } else {
      add_edge(chain[chain_size], i * 2);
      chain_size++;
      chain[chain_size] = i * 2;
    }
  }
  return 0;
}
