U213273 [GDOI2022 普及组] 数列游戏(有数据)

题目描述

有一个长度为 $n$ 的序列 $a_1,\cdots,a_n$。 如果序列的长度大于 $1$,那么你就能进行操作,每次操作可以选择相邻的两个数 $a_i,a_{i+1}$ 合并,得到一个新的数 $a_i\oplus a_{i+1}$(“$\oplus$”表示异或),每次操作都会使序列的长度减少 $1$。例如对序列 $[8,3,5,7,1]$ 中的第 $2$ 个数和第 $3$ 个数进行合并,会得到新序列 $[8,6,7,1]$,并可以进行下一轮操作。 你需要进行若干次操作(可能是 $0$ 次),使得最终序列**任意子区间**的异或和不为 $0$。子区间的定义为连续的一段数 $[a_l,a_{l+1},\cdots,a_{r}]$($l\leq r$)。求满足条件的最终序列的最长长度。

输入格式

第一行一个正整数 $n$,表示序列长度。 第二行 $n$ 个正整数 $a_1,\cdots,a_n$,表示序列。

输出格式

一个整数,满足条件的最终序列的最长长度。如果不存在这样的序列则输出 “`-1`”(不含引号)。

说明/提示

#### 样例解释 一种方案是先选择 $a_1,a_2$ 合并,得到 $[0,7,2]$,再选择前两个数合并,得到 $[7,2]$。不存在方案使得最终序列长度为 $3$ 或 $4$。 #### 数据范围 对于所有测试点,$1\leq n\leq 10^5$,$0\leq a_i\leq 10^9$。 |测试点|$n\leq$|$a_i\leq$| |:-:|:-:|:-:| |$1\sim 4$|$15$|$10^9$| |$5\sim 8$|$100$|$3$| |$9\sim 12$|$1000$|$3$| |$13\sim 16$|$10^5$|$10^5$| |$17\sim 20$|$10^5$|$10^9$|