你有一个长度为 $n$ 的序列 $a_1, a_2, \dots, a_n$。
现在,你想删去其中任意一些元素,使剩下元素的异或和最小。
试求:
- 这个最小异或和;
- 你需要删除哪些元素。
若有多解,输出任意一组。
输入格式
第一行一个整数 $n$。
第二行 $n$ 个整数,其中第 $i$ 个为 $a_i$。
输出格式
第一行,两个整数 $x$, $m\ (0 \leq m \leq n)$:最小异或和以及你删除的元素个数。
第二行,$m$ 个整数,依次表示删去的元素的下标。要求按升序排列。
样例输入
3
1 2 1
样例输出
0 1
2
数据规模
- Subtask $1$($20\%$):$1\leq n \leq 9$, $1 \leq a_i \leq 2 ^ {10}$。
- Subtask $2$($80\%$):$1\leq n \leq 100000$, $1\leq a_i \leq 2 ^ {30}-1$。
说明
异或($\mathbin{\text{xor}}$)的定义:$x \mathbin{\text{xor}} y$ 的二进制表示中的某一位等于 $1$ 当且仅当 $x$ 和 $y$ 在二进制下的这一位不相等。如 $3 \mathbin{\text{xor}} 5 = (11)_2 \mathbin{\text{xor}} (101)_2 = (110)_2 = 6$。
异或和的定义:$a_1$, $a_2$, …, $a_n$的异或和等于$(((a_1 \mathbin{\text{xor}} a_2) \mathbin{\text{xor}} a_3) \mathbin{\text{xor}} \cdots \mathbin{\text{xor}} a_n)$。
$by\ \text{djq_cpp}$