墨提斯的排列
题号:NC312051
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}排列相邻位异或起来求和——和异位!
\hspace{15pt}萨莉亚——和意味!
\hspace{15pt}墨提斯想构造一个长度为 2 ^ n排列 p_0,p_1,\ldots,p_{(2 ^ n - 1)},使得相邻两项异或值之和最小。换句话说,最小化:

\displaystyle\sum\limits_{i = 1}^{2 ^ n - 1} \Big(p_{i-1} \oplus p_i\Big)

\hspace{15pt}可以证明,最优解一定存在。

【名词解释】
\hspace{15pt}长度为 n排列:由 0,1,\ldots,n-1n 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{1,2,0,4,3\} 是一个长度为 5 的排列,而 \{0,1,1\}\{0,2,3\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
\hspace{15pt}\oplus:指位运算中的按位异或(Bitwise XOR),对两个整数的二进制表示按位进行异或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节

输入描述:

\hspace{15pt}输入一个正整数 n \left(1 \leq n \leq 18\right)

输出描述:

\hspace{15pt}在一行中输出 2 ^ n 个整数,表示构造的排列。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
1

输出

复制
0 1

说明

\hspace{15pt}在这个样例中,输出 \{0,1\}\{1,0\} 都是合法的答案。