#include <bits/stdc++.h>
using namespace std;
using P = pair<int, int>;
int main() {
  int n;
  scanf("%d", &n);
  vector<int> a(n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  vector<P> ans;
  set<int> p2, p3, ry;
  for (int i = 0; i < n; i++) {
    ry.insert(i + 1);
  }
  bool ok = true;
  for (int i = 0; i < n; i++) {
    if (a[i] == 1) {
      if (!p2.empty()) {
        int y = *p2.begin();
        ans.emplace_back(y, i + 1);
        p2.erase(y);
      } else {
        int y = *ry.begin();
        ans.emplace_back(y, i + 1);
        ry.erase(y);
        if (!p3.empty()) {
          y = *p3.begin();
          ans.emplace_back(y, i + 1);
          p3.erase(y);
        }
      }
    } else if (a[i] == 2) {
      int y = *ry.begin();
      ans.emplace_back(y, i + 1);
      ry.erase(y);
      p2.insert(y);
      if (!p3.empty()) {
        y = *p3.begin();
        ans.emplace_back(y, i + 1);
        p3.erase(y);
      }
    } else if (a[i] == 3) {
      if (!p3.empty()) {
        int y = *p3.begin();
        ans.emplace_back(y, i + 1);
        p3.erase(y);
      }
      int y = *ry.begin();
      ans.emplace_back(y, i + 1);
      ry.erase(y);
      p3.insert(y);
    }
  }
  ok = p2.empty() && p3.empty();
  if (ok) {
    cout << ans.size() << endl;
    for (auto p : ans) {
      cout << p.first << " " << p.second << "\n";
    }
  } else {
    cout << -1 << endl;
  }
  return 0;
}
