#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
char str[100005];
struct node {
  int x, y;
};
int a[100005], vis[100005], r[100005];
vector<int> aa, bb;
vector<int> t1, t2;
queue<int> tc;
int n, mm;
long long m;
void doit() {
  aa.clear();
  bb.clear();
  memset(vis, 0, sizeof(vis));
  ;
  scanf("%d", &n);
  while (!tc.empty()) tc.pop();
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  int id = 0;
  int lll;
  for (int i = 1; i <= n; i++)
    if (a[i] == 3) {
      if (id) {
        aa.push_back(id);
        bb.push_back(i);
      }
      r[i] = ++id;
      if (id > n) {
        puts("-1");
        return;
      }
      aa.push_back(r[i]);
      bb.push_back(i);
      lll = i;
    }
  int ok = 0;
  while (id > 0) {
    for (int i = lll + 1; i <= n; i++)
      if (a[i] == 2 && !vis[i]) {
        if (id) {
          aa.push_back(id);
          bb.push_back(i);
        }
        vis[i] = 2;
        ok = 1;
        r[i] = ++id;
        aa.push_back(r[i]);
        bb.push_back(i);
        break;
      }
    if (ok) break;
    for (int i = lll + 1; i <= n; i++)
      if (a[i] == 1 && !vis[i]) {
        if (id) {
          aa.push_back(id);
          bb.push_back(i);
        }
        vis[i] = 1;
        ok = 1;
        r[i] = ++id;
        aa.push_back(r[i]);
        bb.push_back(i);
        break;
      }
    if (!ok) {
      puts("-1");
      return;
    }
    if (ok) break;
  }
  for (int j = 1; j <= n; j++)
    if (vis[j] == 2) {
      ok = 0;
      for (int i = j + 1; i <= n; i++) {
        if (a[i] == 1 && !vis[i]) {
          aa.push_back(id);
          bb.push_back(i);
          ok = 1;
          id++;
          vis[i] = 1;
          break;
        }
      }
      if (!ok) {
        puts("-1");
        return;
      }
    }
  int sz;
  int top;
  for (int i = n; i >= 1; i--) {
    if (vis[i]) continue;
    if (a[i] == 1) {
      r[i] = ++id;
      aa.push_back(r[i]);
      bb.push_back(i);
      tc.push(i);
    }
    if (a[i] == 2) {
      if (tc.empty()) {
        puts("-1");
        return;
      }
      top = tc.front();
      tc.pop();
      aa.push_back(r[top]);
      bb.push_back(i);
    }
  }
  sz = int(aa.size());
  printf("%d\n", sz);
  for (int i = 0; i <= sz - 1; i++) printf("%d %d\n", aa[i], bb[i]);
}
int main() { doit(); }
