题目描述
给定正整数 N。初始时,集合 S={0,1,…,2N−1}。
初始时序列 b0=b1=…=bN−1=0。
考虑重复以下过程 2N−1 次:
- 从 S 中选出两个整数 X,Y,满足 X⊕Y=2k(k∈N)。将它们从 S 中删去。
- 令 bk←bk+1。
给定序列 a0,a1,…,aN−1。判断是否能通过恰当地选择每次操作的 X,Y,满足最终得到的 b 序列和 a 序列相同。如果能的话,还需要构造一组方案。
如果正确地判断了解的存在性,你也能得到部分分数。详见「计分方式」。
输入格式
第一行,正整数 N。
第二行,N 个非负整数 a0,a1,…,aN−1。
保证 ∑ai=2N−1。
输出格式
如果不可能,输出一行一个 -1。
否则,输出 2N−1 行,每行两个非负整数 X,Y。
输出任意一组解均可。
输入输出样例 #1
输入 #1
2
2 0
输出 #1
0 1
2 3
输入输出样例 #2
输入 #2
2
1 1
输出 #2
-1
输入输出样例 #3
输入 #3
3
2 0 2
输出 #3
0 1
2 6
3 7
4 5
说明/提示
数据范围
- 1≤N≤20;
- 0≤ai;
- ∑ai=2N−1。
子任务
子任务 0 为样例。
子任务编号 |
N |
特殊性质 |
得分 |
1 |
≤4 |
|
15 |
2 |
≥2 |
对于所有 i>2,ai=0 |
3 |
≤6 |
|
20 |
4 |
≤20 |
50 |