#include <bits/stdc++.h>
using namespace std;
void solve() {
  long n;
  cin >> n;
  vector<long long> arr(n);
  bool y = 1;
  long long num;
  long long a = 0, b = 0, c = 0;
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
    if (arr[i] == 2) {
      b++;
      if (c > 0) {
        c--;
      }
    } else if (arr[i] == 1) {
      if (b > 0) {
        b--;
      } else if (c > 0) {
        c--;
      }
    } else if (arr[i] == 3) {
      if (c > 0) {
        c--;
      }
      c++;
    }
  }
  if (b || c) {
    y = 0;
  }
  if (y) {
    int i = 1, j = 1;
    int j1 = -1;
    vector<long long> ans[2];
    queue<pair<long long, long long> > qu2, qu3;
    pair<long long, long long> temp;
    vector<bool> y(n, 0);
    for (int i1 = 0; i1 < n; i1++) {
      if (arr[i1] == 0) {
        continue;
      } else {
        if (arr[i1] == 2) {
          if (qu3.size()) {
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second);
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second + 1);
            temp.first = i1 + 1;
            temp.second = qu3.front().second + 1;
            qu2.push(temp);
            qu3.pop();
            continue;
          }
          ans[1].push_back(i1 + 1);
          ans[0].push_back(i1 + 1);
          temp.first = i1 + 1;
          temp.second = i1 + 1;
          qu2.push(temp);
        } else if (arr[i1] == 1) {
          if (qu2.size()) {
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu2.front().second);
            qu2.pop();
            continue;
          } else if (qu3.size()) {
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second);
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second + 1);
            qu3.pop();
            continue;
          } else {
            ans[1].push_back(i1 + 1);
            ans[0].push_back(i1 + 1);
          }
        } else if (arr[i1] == 3) {
          if (qu3.size()) {
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second);
            ans[1].push_back(i1 + 1);
            ans[0].push_back(qu3.front().second + 1);
            temp.first = i1 + 1;
            temp.second = qu3.front().second + 1;
            qu3.push(temp);
            qu3.pop();
            continue;
          }
          ans[1].push_back(i1 + 1);
          ans[0].push_back(i1 + 1);
          temp.first = i1 + 1;
          temp.second = i1 + 1;
          qu3.push(temp);
        }
      }
    }
    cout << ans[0].size() << "\n";
    for (int i = 0; i < ans[0].size(); i++) {
      cout << ans[0][i] << " " << ans[1][i] << "\n";
    }
  } else {
    cout << "-1\n";
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long t = 1;
  while (t--) solve();
}
