CF1163E Magical Permutation

题目描述

Kuro 刚刚学习了排列,他非常兴奋地想要创造一种新的排列类型。他选择了 $n$ 个互不相同的正整数,并将它们全部放入集合 $S$ 中。现在他定义了一种“魔法排列”,其定义如下: - 是 $0$ 到 $2^x - 1$ 的一个排列,其中 $x$ 是一个非负整数。 - 排列中任意两个相邻元素的按位异或结果属于集合 $S$。 由于 Kuro 对魔法排列非常感兴趣,他想要构造最长的魔法排列。换句话说,他想要找到最大的非负整数 $x$,使得存在一个 $0$ 到 $2^x - 1$ 的魔法排列。由于他在这个领域还是新手,他希望你帮他找到这个 $x$ 的值,并给出对应的魔法排列。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^5$),表示集合 $S$ 的元素个数。 第二行包含 $n$ 个互不相同的整数 $S_1, S_2, \ldots, S_n$($1 \leq S_i \leq 2 \cdot 10^5$),表示集合 $S$ 的元素。

输出格式

第一行输出最大的非负整数 $x$,使得存在一个 $0$ 到 $2^x - 1$ 的魔法排列。 第二行输出 $2^x$ 个整数,表示 $0$ 到 $2^x - 1$ 的一个魔法排列。如果有多种魔法排列,输出任意一种均可。

说明/提示

在第一个样例中,$0, 1, 3, 2$ 是一个魔法排列,因为: - $0 \oplus 1 = 1 \in S$ - $1 \oplus 3 = 2 \in S$ - $3 \oplus 2 = 1 \in S$ 其中 $\oplus$ 表示按位异或运算。 由 ChatGPT 4.1 翻译