CFCF2189C2.XOR-convenience (Hard Version)

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是此问题的困难版本。不同版本之间的区别在于,在此版本中,1in11 \le i \le n-1。请注意,困难版本的正确解不一定是简单版本的正确解。

给定一个正整数 nn。求一个长度为 nn 的排列 $ ^{\text{∗}} $ pp,使得对于每个 ii1in11 \le i \le n-1),都存在一个 jjijni \le j \le n)使得 ^\text{†} pi=pjip_i = p_j \oplus i,或者判断这样的排列不存在。

$ ^{\text{∗}} $ 长度为 nn 的排列是一个包含从 11nnnn 个不同整数的数组,顺序任意。例如,[2,3,1,5,4][2,3,1,5,4] 是一个排列,但 [1,2,2][1,2,2] 不是排列(22 在数组中出现两次),[1,3,4][1,3,4] 也不是排列(n=3n=3 但数组中有 44)。

\oplus 表示按位异或操作。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 tt1t1041 \le t \le 10^4)。测试用例的描述如下。

每个测试用例只有一行,包含一个正整数 nn3n2×1053 \leq n \leq 2 \times 10^5)——排列的长度。

保证所有测试用例的 nn 的总和不超过 2×1052 \times 10^5

输出格式

对于每个测试用例,如果存在合适的排列,则输出 nn 个整数 p1,p2,,pnp_1, p_2, \ldots, p_n —— 排列 pp。否则输出 1-1

如果存在多个解,输出其中任意一个。

输入输出样例

  • 输入#1

    2
    3
    4

    输出#1

    2 1 3
    -1

说明/提示

在第一个测试用例中,排列 p=[2,1,3]p = [2,1,3] 满足条件,因为:

  • p2=1p_2 = 1
  • p32=32=1p_3 \oplus 2 = 3 \oplus 2 = 1

在第二个测试用例中,没有合适的排列。

首页