题目描述
对于一个 1∼n 的排列 {pn},定义其异或生成序列为一个长度为 n−1 的非负整数序列 {bn−1},按如下方式生成:
bi=pixorpi+1
其中 xor 代表按位异或运算。在 C++ 语言中由 ^
运算符表示。
给定 n,{bn−1},你需要构造一个对应的排列 {pn}。
输入数据保证有解,如果存在多个解,输出任意一个即可。
输入格式
本题单个测试点内含有多组测试数据。
第一行一个正整数 T,代表测试数据组数。
对于每组测试数据,
输出格式
对于每组测试数据,输出一行 n 个正整数,代表一个对应的排列 {pn}。如果存在多个解,输出任意一个即可。
提示
【样例解释】
对于第一组测试数据,我们有:
- b1=p1xorp2=2xor3=1
- b2=p2xorp3=3xor1=2
- b3=p3xorp4=1xor4=5
因此得到的 b 序列和输入中的相同,进而该排列符合要求。
对于第二组测试数据,[4,5,2,1,3,6] 也是一个符合要求的排列。
【数据范围】
本题采用捆绑测试。
对于 100% 的数据:
- 2≤n≤2×106;
- 1≤T≤106;
- ∑n≤2×106;
- 保证至少存在一个合法的解。
具体部分分分配如下:
Subtask 编号 |
数据范围 |
分值 |
1 |
∑n2≤2×106 |
17 |
2 |
2∤n |
23 |
3 |
4∣n |
26 |
4 |
无特殊限制 |
34 |
【提示】
本题输入文件较大,请使用较为快速的输入方式。