#include typedef long long ll; const int maxn = 1e6 + 3; int n, m; ll a[maxn]; void fwt() { for(int i = 1; i < m; i *= 2) for(int j = 0; j < m; j += i * 2) for(int k = 0; k < i; ++k) a[j + k] += a[j + k + i]; } void ifwt() { for(int i = 1; i < m; i *= 2) for(int j = 0; j < m; j += i * 2) for(int k = 0; k < i; ++k) a[j + k] -= a[j + k + i]; } int main() { scanf("%d", &n); m = 1; while(m < n) m *= 2; for(int i = 0; i < n; ++i) { scanf("%lld", a + i); if(a[i] == -1) a[i] = 0; } fwt(); for(int i = 0; i < m; ++i) a[i] *= a[i]; ifwt(); ll ans = 0; for(int i = 0; i < n; ++i) ans = std::__gcd(ans, a[i]); printf("%lld\n", ans ? ans : -1); return 0; }