题库练习 Restore Graph
← 上一题 下一题 →

A9434 | Restore Graph

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

Valera had an undirected connected graph without self-loops and multiple edges consisting of $n$ vertices. The graph had an interesting property: there were at most $k$ edges adjacent to each of its vertices. For convenience, we will assume that the graph vertices were indexed by integers from 1 to $n$ .

One day Valera counted the shortest distances from one of the graph vertices to all other ones and wrote them out in array $d$ . Thus, element $d[i]$ of the array shows the shortest distance from the vertex Valera chose to vertex number $i$ .

Then something irreparable terrible happened. Valera lost the initial graph. However, he still has the array $d$ . Help him restore the lost graph.

输入格式

The first line contains two space-separated integers $n$ and $k$ $(1<=k<n<=10^{5})$ . Number $n$ shows the number of vertices in the original graph. Number $k$ shows that at most $k$ edges were adjacent to each vertex in the original graph.

The second line contains space-separated integers $d[1],d[2],...,d[n]$ $(0<=d[i]<n)$ . Number $d[i]$ shows the shortest distance from the vertex Valera chose to the vertex number $i$ .

输出格式

If Valera made a mistake in his notes and the required graph doesn't exist, print in the first line number -1. Otherwise, in the first line print integer $m$ $(0<=m<=10^{6})$ — the number of edges in the found graph.

In each of the next $m$ lines print two space-separated integers $a_{i}$ and $b_{i}$ $(1<=a_{i},b_{i}<=n; a_{i}≠b_{i})$ , denoting the edge that connects vertices with numbers $a_{i}$ and $b_{i}$ . The graph shouldn't contain self-loops and multiple edges. If there are multiple possible answers, print any of them.

输入输出样例

输入 #1
3 2
0 1 1
输出 #1
3
1 2
1 3
3 2
输入 #2
4 2
2 0 1 3
输出 #2
3
1 3
1 4
2 3
输入 #3
3 1
0 0 0
输出 #3
-1
C++ 编辑器
输入
输出