P14025 [ICPC 2024 Nanjing R] P ⊕ Q = R

题目描述

Alice 想要训练自己解决构造题的能力。所以她的朋友,超级人工智能 Kei,为 Alice 生成了以下问题。 给定一个整数 $n$,构造两个 $0,1,\dots,(n-1)$ 的排列 $P = p_1,p_2,\cdots,p_n$ 和 $Q = q_1,q_2,\cdots,q_n$,使得序列 $R = r_1,r_2,\cdots,r_n$ 仍然是一个 $0,1,\dots,(n-1)$ 的排列,其中 $r_i = p_i \oplus q_i$。这里 $x \oplus y $ 表示 $x$ 和 $y$ 按位异或的结果。 Alice 利用她强大的计算能力解决了这个问题,现在她决定和您分享这个问题。您能解决它吗?

输入格式

有多组测试数据。第一行输入一个整数 $T$ 表示测试数据组数。对于每组测试数据: 第一行输入一个整数 $n$($1 \leq n \leq 2 \times 10^5$)表示排列的长度。 保证所有数据 $n$ 之和不超过 $2 \times 10^6$。

输出格式

对于每组数据: 如果存在符合要求的两个排列,首先输出一行 $\texttt{Yes}$。接下来输出第二行,包含 $n$ 个由单个空格分隔的整数 $p_1,p_2,\dots,p_n$。最后输出第三行,包含 $n$ 个由单个空格分隔的整数 $q_1,q_2,\dots,q_n$。如果有多种合法答案,您可以输出任意一种。 如果不存在符合要求的两个排列,只要输出一行 $\texttt{No}$。

说明/提示

对于第二组样例数据,$R = \{ 3,0,1,2\}$ 仍然是 $0,1,2,3$ 的排列。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/752yfu9s.png) :::