小苯的权值计算
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯通过如下步骤计算一个长度为 n 的数组 \{a_1,a_2,\dots,a_n\} 的权值:
\hspace{23pt} \bullet 计算所有相邻元素的异或和^\texttt{[1]},形成一个长度为 n - 1 的新数组 \{b_1,b_2,\dots,b_{n - 1}\}(形式化的,b_i = a_i \operatorname{xor} a_{i + 1})。
\hspace{23pt} \bullet 定义数组 a 的权值为数组 b 的最大公因数^\texttt{[2]}(形式化的,权值为 \gcd\left(b_1 , b_2 ,\dots, b_{n - 1}\right) )。

\hspace{15pt}小红构造了一个长度为 n 且元素均为正整数的数组 \{a_1,a_2,\dots,a_n\},他想让小苯计算这个数组的权值。
\hspace{15pt}请你帮帮小苯。

【名词解释】
\hspace{15pt}异或和^\texttt{[1]}:两个数进行按位异或运算的结果。
\hspace{15pt}最大公因数^\texttt{[2]}(gcd):指多个整数共有因数中最大的一个。例如,121830 的公因数有 1,2,3,6,其中最大的因数是 6,因此 \gcd(12,18,30)=6。特殊的,定义 \gcd\left(0,x \right) = x

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(2 \leqq n \leqq 20\right),表示数组的长度。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left(1 \leqq a_i \leqq 10^3 \right),表示小红构造的数组。

输出描述:

\hspace{15pt}输出一个整数,代表数组的权值。
示例1

输入

复制
3
1 2 3

输出

复制
1

说明

\hspace{15pt}在这个样例中,新数组 b = \{1 \operatorname{xor} 2, 2 \operatorname{xor} 3\} = \{3,1\},其最大公因数为 1
示例2

输入

复制
4
1 2 4 8

输出

复制
3