#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> ans, res, res2;
int A[100001];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ((void)0);
  ((void)0);
  ((void)0);
  int N, c, temp;
  cin >> N;
  c = N;
  for (int i = 1; i <= N; i++) cin >> A[i];
  for (int i = N; i > 0; i--)
    if (A[i]) {
      if (A[i] == 1) {
        res.emplace_back(c, i);
        ans.emplace_back(c--, i);
      } else if (A[i] == 2) {
        if (res.empty()) {
          cout << "-1\n";
          return 0;
        }
        ans.emplace_back(res.back().first, i);
        res2.emplace_back(res.back().first, i);
        res.pop_back();
      } else {
        if (res.empty() && res2.empty()) {
          cout << "-1\n";
          return 0;
        }
        if (res2.size()) {
          ans.emplace_back(c, res2.back().second);
          ans.emplace_back(c--, i);
          temp = res2.back().first;
          res2.pop_back();
        } else {
          ans.emplace_back(c, res.back().second);
          ans.emplace_back(c--, i);
          temp = res.back().first;
          res.pop_back();
        }
        res2.emplace_back(temp, i);
      }
    }
  cout << ans.size() << '\n';
  for (auto [x, y] : ans) cout << x << ' ' << y << '\n';
  return 0;
}
