Untitled
unknown
c_cpp
5 months ago
2.0 kB
0
Indexable
Never
#include "bits/stdc++.h" using namespace std; using ll = long long; using ull = unsigned long long; using db = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using pdd = pair<db, db>; using tiii = tuple<int, int, int>; using str = string; #define vt vector #define pb push_back #define eb emplace_back #define ins insert #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() #define mp make_pair #define mt make_tuple #define fi first #define se second constexpr int INFi = 2e9; vt<ll> bits[64]; int dfs(ll cur, int depth, ll start, ll finish, unordered_set<ll> &used) { used.ins(cur); int ans = INFi; for (int j = 0; j < 64; j++) { if ((cur >> j) & 1) { for (ll &g : bits[j]) { if (!used.count(g)) { if (g == finish && cur != start) { return depth + 1; } else { ans = min(dfs(g, depth + 1, start, finish, used), ans); } } } } } return ans; } void solve() { int n; cin >> n; for (int i = 0; i < n; i++) { ll a; cin >> a; for (int j = 0; j < 64; j++) { if ((a >> j) & 1) { bits[j].pb(a); } } } int answ = INFi; for (int i = 0; i < 64; i++) { if (sz(bits[i]) >= 3) { cout << "3\n"; return; } else if (sz(bits[i]) == 2) { unordered_set<ll> used; answ = min(answ, dfs(bits[i][0], 1, bits[i][0], bits[i][1], used)); } } cout << (answ == INFi ? -1 : answ) << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(NULL); // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); int tests = 1; // cin >> tests; while (tests--) { solve(); } return 0; }