#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
struct _two {
  int a, b;
} ans[N * N], x, y, z;
bool operator<(_two x, _two y) { return x.a < y.a; }
int n, tot;
int a[N];
void Init() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
}
void Sort() {
  if (z < x) swap(x, z);
  if (y < x) swap(x, y);
  if (z < y) swap(y, z);
}
void Change() {
  while (1) {
    Sort();
    if (!x.a) break;
    int temp = y.a / x.a;
    for (int i = 0; i <= 20; i++) {
      if (1 << i > temp) break;
      if (temp & 1 << i) {
        ans[++tot] = (_two){x.b, y.b};
        y.a -= x.a;
      } else {
        ans[++tot] = (_two){x.b, z.b};
        z.a -= x.a;
      }
      x.a += x.a;
    }
  }
}
void Work() {
  int num = 0;
  for (int i = 1; i <= n; i++)
    if (a[i]) num++;
  if (num < 2)
    puts("-1");
  else {
    num = tot = 0;
    for (int i = 1; i <= n; i++)
      if (a[i]) {
        ++num;
        if (num == 1) z = (_two){a[i], i};
        if (num == 2) y = (_two){a[i], i};
        if (num > 2) {
          x = (_two){a[i], i};
          Change();
        }
      }
    printf("%d\n", tot);
    for (int i = 1; i <= tot; i++) printf("%d %d\n", ans[i].a, ans[i].b);
  }
}
int main() {
  Init();
  Work();
  return 0;
}
