#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1073741824")
using namespace std;
const int MAXN = 1e5 + 100;
vector<int> v[MAXN];
vector<pair<int, int>> ed;
int main() {
#pragma warning(disable : 4996)
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    int a;
    scanf("%d", &a);
    v[a].push_back(i);
  }
  if (v[0].size() > 1) {
    printf("-1");
    return 0;
  }
  for (int i = 1; i < n; i++) {
    for (int j = 0; j < v[i].size(); j++) {
      if (k - 1 == 0 && i > 1) {
        printf("-1");
        return 0;
      }
      int p = j / (i > 1 ? k - 1 : k);
      if (p >= v[i - 1].size()) {
        printf("-1");
        return 0;
      }
      ed.push_back({v[i - 1][p], v[i][j]});
    }
  }
  printf("%d\n", ed.size());
  for (auto p : ed) printf("%d %d\n", p.first, p.second);
  return 0;
}
