#include <bits/stdc++.h>
namespace IO {
char BB[1 << 15], *SS = BB, *TT = BB;
inline bool Isdigit(const char ch) { return '0' <= ch && ch <= '9'; }
inline int Read() {
  register int x = 0;
  char ch = getchar();
  while (!Isdigit(ch)) ch = getchar();
  while (Isdigit(ch)) {
    x = x * 10 + (ch ^ 48);
    ch = getchar();
  }
  return x;
}
inline int Max(const int x, const int y) { return x < y ? y : x; }
inline int Min(const int x, const int y) { return x < y ? x : y; }
}  // namespace IO
int n, a[1000 + 5], ans1[100000 + 5], ans2[100000 + 5], tot, p1, p2 = 1, p3 = 2;
void Set(const int x, const int& y) {
  ans1[++tot] = y;
  ans2[tot] = x;
  a[x] -= a[y];
  a[y] <<= 1;
}
int main() {
  n = IO::Read();
  for (int i = 1; i <= n; ++i) a[i] = IO::Read();
  for (int i = 3; i <= n; ++i)
    for (p1 = i;;) {
      if (a[p1] > a[p2]) p1 ^= p2 ^= p1 ^= p2;
      if (a[p2] > a[p3]) p2 ^= p3 ^= p2 ^= p3;
      if (a[p1] > a[p2]) p1 ^= p2 ^= p1 ^= p2;
      if (a[p1] == 0) break;
      for (int j = a[p2] / a[p1]; j; j >>= 1)
        if (j & 1)
          Set(p2, p1);
        else
          Set(p3, p1);
    }
  if (((a[p1] == 0) + (a[p2] == 0) + (a[p3] == 0) != 1))
    puts("-1");
  else {
    printf("%d\n", tot);
    for (int i = 1; i <= tot; ++i) printf("%d %d\n", ans1[i], ans2[i]);
  }
  return 0;
}
