#include <bits/stdc++.h>
using namespace std;
using INT = long long;
using pii = pair<int, int>;
int d[1100];
vector<int> vec[1100];
int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
  int t = n / 2 + 1;
  for (int i = 1; i < t; i++) {
    for (int j = 1; j <= d[i] - d[i - 1]; j++) vec[i].push_back(j + d[i - 1]);
  }
  for (int j = 1; j <= d[t] - d[t - 1] + 1; j++) vec[t].push_back(j + d[t - 1]);
  for (int i = t + 1; i <= n; i++) {
    for (int j = 1; j <= d[i] - d[i - 1]; j++)
      vec[i].push_back(j + d[i - 1] + 1);
  }
  vector<pii> ans;
  int ed = t - 1;
  if (n & 1) ed++;
  for (int i = 1; i <= ed; i++) {
    for (int j = 0; j < vec[i].size(); j++) {
      for (int k = j + 1; k < vec[i].size(); k++) {
        int u = vec[i][j], v = vec[i][k];
        ans.push_back(pii(u, v));
      }
    }
  }
  for (int i = 1; i < t; i++) {
    for (int u : vec[i]) {
      for (int j = i + 1; j <= n - i + 1; j++) {
        for (int v : vec[j]) {
          ans.push_back(pii(u, v));
        }
      }
    }
  }
  sort(ans.begin(), ans.end());
  ans.resize(unique(ans.begin(), ans.end()) - ans.begin());
  if (ans.size() > 1000000) assert(0);
  cout << ans.size() << endl;
  for (auto p : ans) printf("%d %d\n", p.first, p.second);
  return 0;
}
