小红的二分图构造
题号:NC286185
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红希望你构造一个二分图,满足第 i 个节点的度数恰好等于 d_i 。你能帮帮她吗?

\hspace{15pt}二分图是一张满足如下条件的图:它的节点可以被分成两个不相交的集合 UV ,使得图中的每一条边都连接 U 中的一个节点与 V 中的一个节点。

输入描述:

\hspace{15pt}第一行输入一个正整数 n \left(1\leq n \leq 100\right) ,代表二分图的节点数量。
\hspace{15pt}第二行输入 n 个正整数 d_1, d_2, \cdots, d_n \left(1\leq d_i \leq n-1\right) ,代表每个节点的度数。

输出描述:

\hspace{15pt}如果答案不存在,直接输出 -1

\hspace{15pt}否则,请参考下方的格式输出。
\hspace{15pt}第一行输出一个整数 m 代表边的数量。
\hspace{15pt}接下来的 m 行,每行输出两个正整数 u,v \left(1\leq u,v \leq n\right) 代表节点 u 和节点 v 有一条边连接。
\hspace{15pt}构造的图可以包含重边,但不能包含自环。构造的最终的图可以不连通,你只需要保证每个连通分量均为二分图。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
3
1 2 1

输出

复制
2
1 2
2 3

说明

\hspace{15pt}构造的图是一棵树,显然所有树都是二分图。
示例2

输入

复制
3
2 2 2

输出

复制
-1

说明

\hspace{15pt}只能构造一个三元环,显然不是二分图。