#include <bits/stdc++.h>
using namespace std;
int a[1010], seq[1010], id;
int qtes, u[1000010], v[1000010];
inline void add(int x, int y) {
  a[y] -= a[x], a[x] *= 2, u[++qtes] = x, v[qtes] = y;
}
inline void Solve(int x, int y, int z) {
  int q[3] = {x, y, z};
  register int i, j;
  for (i = 0; i < 3; ++i)
    for (j = i + 1; j < 3; ++j)
      if (a[q[i]] > a[q[j]]) swap(q[i], q[j]);
  x = q[0], y = q[1], z = q[2];
  if (x == y) {
    add(x, y);
    return;
  }
  if (y == z) {
    add(y, z);
    return;
  }
  int w = a[y] / a[x];
  int tmp = w, up;
  for (i = 0; tmp; ++i)
    if ((tmp >> i) & 1) up = i, tmp ^= (1 << i);
  for (i = 0; i <= up; ++i) {
    if ((w >> i) & 1)
      add(x, y);
    else
      add(x, z);
  }
  if (a[x] == 0 || a[y] == 0 || a[z] == 0)
    return;
  else
    Solve(x, y, z);
}
int main() {
  int n;
  scanf("%d", &n);
  register int i, j;
  for (i = 1; i <= n; ++i) scanf("%d", &a[i]);
  int last = 0;
  for (i = 1; i <= n; ++i)
    if (a[i]) ++last;
  if (last < 2) {
    puts("-1");
    return 0;
  } else if (last == 2) {
    puts("0");
    return 0;
  }
  for (last -= 2; last--;) {
    for (id = 0, i = 1; i <= n; ++i)
      if (a[i]) seq[++id] = i;
    Solve(seq[1], seq[2], seq[3]);
  }
  printf("%d\n", qtes);
  for (i = 1; i <= qtes; ++i) printf("%d %d\n", u[i], v[i]);
  return 0;
}
