题号:NC238644
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld
题目描述
对于

个节点有根树(点的编号从

到

),我们设节点

的“长链长度”为

,其可以通过如下方式计算:
即对于叶子节点,其

值为

,否则为所有儿子节点中最大的

值

。
现给定一棵树的

,请还原该树的形态,或报告无解。如有多棵满足限制的树,输出任意一棵即可,详见输出格式。
其中,叶子节点指没有子节点的节点,
)
表示

节点的儿子节点构成的集合。
输入描述:
本题一个测试点内包含多组数据。
第一行一个正整数
,表示数据组数,
。
每组数据的第一行包含一个正整数
,表示树的节点数,保证
且
。
接下来一行
个整数
,意义如上所述,保证
。
输出描述:
对于每组数据,按照如下格式输出:
如果无解,输出一行一个整数
即可。
否则先在第一行输出根节点的编号
。接下来输出
行,每行两个正整数
,表示你构造的树内有连边
。请保证你输出的是一棵树。
示例1
输入
复制
3
5
2 3 1 0 0
6
1 1 0 0 0 0
2
1 0
输出
复制
2
2 1
1 3
3 5
2 4
-1
1
1 2
说明
对于第一组数据,有下面几种(未列出全部)合法的方案:
第二组数据无解,故输出

。
第三组数据只有一组解,树根为

且只有一条边
)
。