#include <bits/stdc++.h>
using namespace std;
long long rdtsc() {
  long long tmp;
  asm("rdtsc" : "=A"(tmp));
  return tmp;
}
const int maxn = (int)1e3;
struct Number {
  int val, pos;
  inline bool operator<(const Number &n) const { return val < n.val; }
};
Number a[maxn];
vector<pair<int, int> > ans;
void makeOperation(int pos1, int pos2) {
  if (a[pos2] < a[pos1]) swap(pos1, pos2);
  ans.push_back(make_pair(a[pos1].pos, a[pos2].pos));
  a[pos2].val -= a[pos1].val, a[pos1].val *= 2;
}
void solveThree() {
  sort(a, a + 3);
  assert(a[0].val);
  while (1) {
    int val0 = a[0].val;
    if (!val0) break;
    int k = a[1].val / a[0].val;
    for (int it = 0; (1 << it) <= k; it++)
      makeOperation(0, 2 - ((k >> it) & 1));
    assert(a[1].val < a[2].val);
    assert(0 <= a[1].val && a[1].val < val0);
    swap(a[0], a[1]);
    if (a[2] < a[1]) swap(a[1], a[2]);
  }
  reverse(a, a + 3);
}
void clear(int &n) {
  for (int i = 0; i < n; i++) {
    if (!a[i].val) {
      swap(a[i--], a[--n]);
      continue;
    }
  }
}
void solve(int n) {
  assert(n >= 2);
  clear(n);
  if (n <= 2) return;
  int lastOdd = -1;
  for (int i = 0; i < n; i++) {
    if (!(a[i].val & 1)) continue;
    if (lastOdd != -1)
      makeOperation(lastOdd, i), lastOdd = -1;
    else
      lastOdd = i;
  }
  clear(n);
  if (n <= 2) return;
  if (lastOdd != -1) {
    for (int i = 0; i < n; i++)
      if (a[i].val & 1) {
        swap(a[i], a[n - 1]);
        break;
      }
  }
  int m = n - (lastOdd != -1);
  for (int i = 0; i < m; i++) {
    assert(!(a[i].val & 1));
    a[i].val /= 2;
  }
  solve(m);
  for (int i = 0; i < 2; i++) a[i].val *= 2;
  if (lastOdd == -1) return;
  assert(n >= 3);
  swap(a[2], a[n - 1]);
  for (int i = 1; i >= 0; i--)
    if (!a[i].val) swap(a[i], a[i + 1]);
  if (a[2].val) solveThree();
}
bool solve() {
  int n;
  if (scanf("%d", &n) < 1) return 0;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i].val);
    a[i].pos = i;
  }
  ans.clear();
  solve(n);
  if (!a[1].val)
    printf("-1\n");
  else {
    printf("%d\n", ((int)(ans).size()));
    for (int i = 0; i < ((int)(ans).size()); i++)
      printf("%d %d\n", ans[i].first + 1, ans[i].second + 1);
  }
  return 1;
}
int main() {
  srand(rdtsc());
  while (1) {
    if (!solve()) break;
  }
  return 0;
}
