异或疑惑
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给你 n 个非负整数 a_1, a_2, a_3 \cdots a_n 和一个非负整数 k,每次操作,你可以选择两个不同的下标 i, j(1 \leq i, j \leq n, i \neq j) 和一个非负整数 x,令 a_i \leftarrow a_i \oplus xa_j \leftarrow a_j \oplus x,求最小操作次数,使得 \textstyle\sum_{i=1}^n a_i = k
\hspace{15pt}特别地,如果无论怎样操作都不能满足等式,输出 -1 表示无解。

【名词解释】
\hspace{15pt}\oplus:指位运算中的按位异或(Bitwise XOR),对两个整数的二进制表示按位进行异或运算。

输入描述:

\hspace{15pt}第一行输入两个整数 n, k \left(1 \leq n \leq 10;\, 0 \leq k \leq 10^{18}\right)
\hspace{15pt}第二行输入 n 个非负整数 a_1, a_2, a_3 \cdots a_n \left(0 \leq a_i \leq 10^{18}\right)

输出描述:

\hspace{15pt}如果存在一种操作方式,使得等式成立,输出一个非负整数,表示最小操作次数;否则,输出 -1 表示无解。
示例1

输入

复制
6 13
1 2 3 4 5 6

输出

复制
1

说明

\hspace{15pt}在这个样例中:
\hspace{23pt}\bullet\,选择 i = 4, j = 5, x = 4 进行一次操作,a_4 \leftarrow a_4 \oplus 4a_5 \leftarrow a_5 \oplus 4
\hspace{15pt}得到新的数组为 \{1,2,3,0,1,6\}
示例2

输入

复制
6 21
1 2 3 4 5 6

输出

复制
0

说明

\hspace{15pt}在这个样例中,数组已经满足等式,不需要进行任何操作。
示例3

输入

复制
6 21
0 21 21 21 21 21

输出

复制
2
示例4

输入

复制
2 0
0 1

输出

复制
-1