说明
给定正整数 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。
输出任意一组解均可。
2
2 0
0 1
2 3
2
1 1
-1
3
2 0 2
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 |
计分方式
如果正确地判断了解的存在性,你也能得到 20% 分数。
具体地说,如果你在无解的时候输出了 −1,有解的时候输出了 2N−1 对非负整数,那么就视为你正确地判断了解的存在性。
如果你构造的方案正确,可以得到剩余的 80% 分数。
题面背景的翻译由 GPT-o4-mini 提供。