#include <bits/stdc++.h>
const int maxn = 0x3f3f3f3f;
const double EI =
    2.71828182845904523536028747135266249775724709369995957496696762772407663035354594571382178525166427;
const double PI = 3.141592653589793238462643383279;
using namespace std;
struct s {
  int a, id;
} z[100010];
inline bool comp(s a, s b) { return a.a > b.a; }
int c[200010];
int main(void) {
  int n, i, pp;
  while (~scanf("%d", &n)) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &z[i].a);
      z[i].id = i;
    }
    sort(z + 1, z + n + 1, comp);
    for (i = 1; i <= n; i++) {
      c[i] = z[i].id * 2 - 1;
      if (i > 1) {
        printf("%d %d\n", c[i - 1], c[i]);
      }
    }
    pp = n;
    for (i = 1; i <= n; i++) {
      if (i - z[i].a + 1 >= 1) {
        printf("%d %d\n", z[i].id * 2, c[i - z[i].a + 1]);
      } else if (i + z[i].a - 1 < pp) {
        printf("%d %d\n", z[i].id * 2, c[i + z[i].a - 1]);
      } else {
        printf("%d %d\n", z[i].id * 2, c[pp]);
        pp++;
        c[pp] = z[i].id * 2;
      }
    }
  }
  return 0;
}
