#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n;
struct node {
  int id, d;
} s[N];
int num[2 * N];
bool cmp(node x, node y) { return x.d > y.d; }
void AddEdge(int u, int v) { printf("%d %d\n", u, v); }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &s[i].d);
    s[i].id = i;
  }
  sort(s + 1, s + n + 1, cmp);
  num[1] = 2 * s[1].id - 1;
  for (int i = 2; i <= n; i++) {
    AddEdge(2 * s[i - 1].id - 1, 2 * s[i].id - 1);
    num[i] = 2 * s[i].id - 1;
  }
  for (int i = 1; i <= n; i++) {
    if (!num[i + s[i].d]) {
      num[i + s[i].d] = 2 * s[i].id;
      AddEdge(num[i + s[i].d - 1], num[i + s[i].d]);
    } else
      AddEdge(num[i + s[i].d - 1], 2 * s[i].id);
  }
  return 0;
}
