#include //#include using namespace std; // using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A &a, const B &b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A &a, const B &b) { if (a > b) { a = b; return true; } return false; } template std::vector zeta(int n, std::vector z) { for (int j = 0; j < n; ++j) { for (int i = 0; i < (1 << n); ++i) { if (1 & (i >> j)) { z[i - (1 << j)] += z[i]; } } } return z; } template std::vector mobius(int n, std::vectorz) { for (int j = n - 1; j >= 0; --j) { for (int i = (1 << n) - 1; i >= 0; --i) { if (1 & (i >> j)) { z[i - (1 << j)] -= z[i]; } } } return z; } #ifndef KWM_T_BASE_INTEGR_HPP #define KWM_T_BASE_INTEGR_HPP #include /** * @brief ローカル環境用(MSC)int128 */ #ifdef _MSC_VER using int128 = long long; #else using int128 = __int128; #endif #endif // KWM_T_BASE_INTEGR_HPP template constexpr T GCD(T a, T b) { if (a < 0) a = -a; if (b < 0) b = -b; while (b) { T t = a % b; a = b; b = t; } return a; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n; cin >> n; vectora(n); rep(i, n)cin >> a[i]; rep(i, n)if (a[i] == -1)a[i] = 0; a.resize(1 << 20); a = zeta(20, a); rep(i, a.size()) a[i] *= a[i]; a = mobius(20, a); int128 ans = 0; rep(i, a.size())ans = GCD(ans, (int128)a[i]); if (ans == 0) ans = -1; cout << (long long)ans << endl; return 0; }