编程题
### 问题描述
小然正在玩一款二进制积分游戏。他有一个长度为 $N$ 的二进制数组 $A$。
在一次操作中,小然可以:
1. 选择一个子串 $A_{L...R}$,其中 $1 \leq L < R \leq |A|$,并计算出这个子串的异或和,然后将这个异或和加到他的得分中。
2. 移除这个子串 $A_{L...R}$,并将剩下的部分连接在一起。
小然可以进行任意多次这样的操作,他的目标是使得最后的得分最大。
请你帮助小然找出在最优策略下,他能得到的最大得分。
### 输入格式
输入的第一行包含一个整数 $T$,表示测试用例的数量。
每个测试用例由两行组成:
- 第一行包含一个整数 $N$,表示二进制数组的长度。
- 第二行包含一个长度为 $N$ 的二进制字符串,由 0 和 1 组成。
### 输出格式
对于每个测试用例,输出一行一个整数,表示小然能得到的最大得分。
### 样例输入
```text
3
5
1 0 0 0 1
3
1 1 1
3
0 0 0
```
### 样例输出
```text
2
1
0
```
### 说明
在第一个测试用例中,我们可以进行以下操作:
- 选择子串 $A_{1...3} = 100$,得分增加 $1$ 分,然后移除这个子串,数组变为 $A = [0,1]$。
- 选择子串 $A_{1...2} = 01$,得分增加 $1$ 分,然后移除这个子串,数组变为空。总得分为 $2$ 分。
### 评测数据范围
$1 \leq T \leq 10^3$。
$1 \leq N \leq 10^5$。
$A_i \in \textbraceleft0,1 \textbraceright$。
所有测试用例中 $N$ 的总和不超过 $10^5$。