CFCF2189C2.XOR-convenience (Hard Version)
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是此问题的困难版本。不同版本之间的区别在于,在此版本中,1≤i≤n−1。请注意,困难版本的正确解不一定是简单版本的正确解。
给定一个正整数 n。求一个长度为 n 的排列 $ ^{\text{∗}} $ p,使得对于每个 i(1≤i≤n−1),都存在一个 j(i≤j≤n)使得 † pi=pj⊕i,或者判断这样的排列不存在。
$ ^{\text{∗}} $ 长度为 n 的排列是一个包含从 1 到 n 的 n 个不同整数的数组,顺序任意。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是排列(2 在数组中出现两次),[1,3,4] 也不是排列(n=3 但数组中有 4)。
† ⊕ 表示按位异或操作。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。测试用例的描述如下。
每个测试用例只有一行,包含一个正整数 n(3≤n≤2×105)——排列的长度。
保证所有测试用例的 n 的总和不超过 2×105。
输出格式
对于每个测试用例,如果存在合适的排列,则输出 n 个整数 p1,p2,…,pn —— 排列 p。否则输出 −1。
如果存在多个解,输出其中任意一个。
输入输出样例
输入#1
2 3 4
输出#1
2 1 3 -1
说明/提示
在第一个测试用例中,排列 p=[2,1,3] 满足条件,因为:
- p2=1
- p3⊕2=3⊕2=1
在第二个测试用例中,没有合适的排列。