#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 20;
bool A[maxn][maxn];
int d[maxn];
vector<pair<int, int> > ans;
void solve(set<int> &a) {
  if ((int)a.size() == 1) {
    int k = *a.begin();
    for (int i = 0; i < k + 1; i++)
      for (int j = i + 1; j < k + 1; j++) A[i][j] = A[j][i] = 1;
    return;
  }
  set<int> tmp;
  int k = *a.rbegin(), mn = *a.begin();
  for (auto x : a)
    if (x != k) tmp.insert(k - x);
  solve(tmp);
  for (int i = 0; i <= k - mn; i++)
    for (int j = i + 1; j <= k - mn; j++)
      A[i][j] = !A[i][j], A[j][i] = !A[j][i];
  for (int i = 0; i <= k - mn; i++)
    for (int j = k - mn + 1; j <= k; j++) A[i][j] = A[j][i] = 1;
  for (int i = k - mn + 1; i <= k; i++)
    for (int j = i + 1; j <= k; j++) A[i][j] = A[j][i] = 1;
}
int main() {
  int m;
  cin >> m;
  set<int> tmp;
  for (int i = 0; i < m; i++) cin >> d[i], tmp.insert(d[i]);
  solve(tmp);
  for (int i = 0; i <= d[m - 1]; i++)
    for (int j = i + 1; j <= d[m - 1]; j++)
      if (A[i][j]) ans.push_back({i, j});
  printf("%d\n", (int)ans.size());
  for (auto x : ans) printf("%d %d\n", x.first + 1, x.second + 1);
}
