#include <bits/stdc++.h>
using namespace std;
void solve() {
  long long n, i, j, k, p, count1 = 0, count2 = 0;
  cin >> n;
  vector<pair<long long, long long>> vect;
  vector<pair<long long, long long>> v;
  vector<long long> a(n, 0);
  for (i = 0; i < n; i++) {
    cin >> a[i];
    if (a[i] != 0) {
      vect.push_back(make_pair(a[i], i));
    }
  }
  if (vect.size() == 0) {
    cout << 0 << endl;
  } else {
    k = vect.size();
    if (vect[k - 1].first != 1) {
      cout << "-1" << endl;
      return;
    } else {
      for (i = k - 1; i >= 0; i--) {
        if (vect[i].first == 1) {
          count1 += 1;
        } else if (vect[i].first == 2) {
          count2 += 1;
        }
        if (count1 < count2) {
          cout << "-1" << endl;
          return;
        }
      }
    }
    j = 0;
    vector<long long> val(k, 0);
    for (i = 0; i < k; i++) {
      if (vect[i].first == 1) {
        if (val[i] == 0) {
          v.push_back(make_pair(vect[i].second + 1, vect[i].second + 1));
        }
      }
      if (vect[i].first == 2) {
        p = max(j, i);
        for (j = p + 1; j < k; j++) {
          if (vect[j].first == 1) {
            val[j] = 1;
            v.push_back(make_pair(vect[i].second + 1, vect[i].second + 1));
            v.push_back(make_pair(vect[i].second + 1, vect[j].second + 1));
            break;
          }
        }
      }
    }
    for (i = 0; i < k; i++) {
      if (vect[i].first == 3) {
        j = i;
        for (j = i + 1; j < k; j++) {
          if (vect[j].first == 2 || vect[j].first == 3) {
            v.push_back(make_pair(vect[i].second + 1, vect[i].second + 1));
            v.push_back(make_pair(vect[i].second + 1, vect[j].second + 1));
            break;
          }
        }
        if (j == k) {
          for (j = i + 1; j < k; j++) {
            if (vect[j].first == 1 && val[j] == 0) {
              v.push_back(make_pair(vect[i].second + 1, vect[i].second + 1));
              v.push_back(make_pair(vect[i].second + 1, vect[j].second + 1));
              break;
            }
          }
          if (j == k) {
            cout << "-1" << endl;
            return;
          }
        }
      }
    }
    cout << v.size() << endl;
    for (i = 0; i < v.size(); i++) {
      cout << v[i].first << " " << v[i].second << endl;
    }
  }
}
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(0);
  std::cout.tie(0);
  int t, count = 0;
  t = 1;
  while (t--) {
    solve();
    count++;
  }
  return 0;
}
