#include <bits/stdc++.h>
using namespace std;
int n, p;
struct Node {
  int i, d;
} d[100005];
vector<int> v[100005 << 1];
bool cmp(Node x, Node y) { return x.d > y.d; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &d[i].d);
    d[i].i = 2 * i;
  }
  sort(d + 1, d + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    v[p++].push_back(d[i].i);
  }
  for (int i = 1; i <= n; i++) {
    if (i + d[i].d - 1 == p) {
      v[p++].push_back(d[i].i - 1);
    } else {
      v[i + d[i].d - 2].push_back(d[i].i - 1);
    }
  }
  for (int i = 0; i < p; i++) {
    for (int j = 1; j < v[i].size(); j++) {
      printf("%d %d\n", v[i][0], v[i][j]);
    }
  }
  for (int i = 1; i < p; i++) {
    printf("%d %d\n", v[i - 1][0], v[i][0]);
  }
  return 0;
}
