#include <bits/stdc++.h>
using namespace std;
int n, k;
vector<pair<int, int> > vec;
vector<int> g[101000];
int ind[101000];
int deg[101000];
int main() {
  int u, v;
  scanf("%d%d", &n, &k);
  for (int i = 0; i < n; i++) {
    scanf("%d", &u);
    vec.push_back(make_pair(u, i + 1));
  }
  sort(vec.begin(), vec.end());
  if (vec[0].first == 0 && vec[1].first == 0 || vec[0].first != 0) {
    printf("-1\n");
    return 0;
  }
  if (vec[n - 1].first > n - 1) {
    printf("-1\n");
    return 0;
  }
  long long lcur = k;
  for (int i = 1; i < n; i++) {
    int j;
    for (j = i; j < n; j++)
      if (vec[j].first != vec[i].first) break;
    if (j - i > lcur) {
      printf("-1\n");
      return 0;
    }
    lcur = (j - i) * ((k - 1) * 1LL);
    i = j - 1;
  }
  for (int i = 0; i < n - 1; i++) {
    if (vec[i + 1].first - vec[i].first > 1) {
      cout << -1 << endl;
      return 0;
    }
  }
  g[0].push_back(vec[0].second);
  printf("%d\n", n - 1);
  for (int i = 1; i < n; i++) {
    if (ind[vec[i].first - 1] >= g[vec[i].first - 1].size()) {
      cout << -1 << endl;
      return 0;
    }
    printf("%d %d\n", g[vec[i].first - 1][ind[vec[i].first - 1]],
           vec[i].second);
    deg[vec[i].second] = 1;
    deg[g[vec[i].first - 1][ind[vec[i].first - 1]]]++;
    if (deg[g[vec[i].first - 1][ind[vec[i].first - 1]]] == k)
      ind[vec[i].first - 1]++;
    g[vec[i].first].push_back(vec[i].second);
  }
}
