取石子 ,但是作弊
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你明天要和小A玩取石子游戏了,游戏规则如下:有n堆石子,每堆有a_i个石子。小A先手,你俩轮流取,可以从任意不为空一堆里取出任意多个。谁取到了最后一个石子谁就赢了。

显然,这个游戏对先手的小A很有利。所以你决定在今天晚上偷偷地从第一堆里取出一些石子放到另一堆里使得后手必胜,现在问你可以取出几个石子来达成目的。如果有多种方案,输出取出最少石子数量。
(注意,你只能从第一堆移动到另一堆而不能移动到多个堆里。同时为了避免被发现,你不能取完第一堆里全部的石子导致总堆数减少。可以不移动)

输入描述:

第一行输入一个正整数 n,表示有 n 堆石子

接下来 1n个正整数分别表示第i堆石子的数量

输出描述:

如果可以按规则移动后使后手必胜,输出一个非负整数x表示你的答案

如果怎样作弊也不能后手必胜,则输出一个-1
示例1

输入

复制
1
3

输出

复制
-1

说明

这个状态先手必胜,而且你无法移动,所以只好认输
示例2

输入

复制
3
6 3 1

输出

复制
1

说明

仅有的两种方案是移动1个或2个到第二堆里,所以输出1