#305. 【NFLSPC #1】Xor sum

题目类型:传统型 时间限制:1000 ms 空间限制:256 MiB
输入文件:标准输入 输出文件:标准输出 答案检查器:Special Judge

你有一个长度为 $n$ 的序列 $a_1, a_2, \dots, a_n$。

现在,你想删去其中任意一些元素,使剩下元素的异或和最小。

试求:

  1. 这个最小异或和;
  2. 你需要删除哪些元素。

若有多解,输出任意一组。


输入格式

第一行一个整数 $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}$