已结束 GESP巅峰赛#33

A7332 | 异或后缀排列

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

给定一个正整数 $n$。

你需要构造一个 $1\sim n$ 的排列 $p_1,p_2,\dots,p_n$,使得对于每个 $i$($1\le i\le n-1$),都能在后缀区间 $[i,n]$ 中找到某个位置 $j$,满足:

$$ p_i = p_j \oplus i, $$

其中 $\oplus$ 表示按位异或。

如果存在这样的排列,输出任意一个;否则输出 $-1$。

输入格式

第一行一个整数 $t$,表示测试组数。

对于每组数据,仅一行一个整数 $n$。

输出格式

对每组数据:

- 若无解,输出 -1
- 若有解,输出一行 $n$ 个整数,表示任意一个合法排列。

输入输出样例

输入 #1
2
3
4
输出 #1
2 1 3
-1
C++ 编辑器
输入
输出