/**
* created by : Mostafa Wael (Phoenix)
* problem name : shortest cycle
*/
#include <bits/stdc++.h>
using namespace std;
int bfs(int source,int n,vector<long long>&v){
vector<int>distance(n,-1),parent(n,-1);
distance[source] = 0;
queue<int>q;
q.push(source);
while(!q.empty()){
int x=q.front(); q.pop();
for(int y=0;y<n;y++){
// y == x self cycle invalid , parent [x] == y cycle like 1->2->1 invalid , v[x]&v[y]==0 there is not edge between two nodes
if(y==x||parent[x]==y||!(v[y]&v[x])) continue;
if(~distance[y]) return distance[y]+distance[x]+1;// length of cycle
distance[y]=distance[x]+1;
parent[y]=x;
q.push(y);
}
}
return 125;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
/**
* if i want to make an edge between two node then (&) between them at least = 1 -> (1)
* for example : (worst case)
* 0.....000000000000001
* 0.....000000000000001
* 0.....000000000000010
* 0.....000000000000010
* 0.....000000000000100
* 0.....000000000000100
* ...
* 10......0000000000000
* 100.....0000000000000
* log2(10^18) = 60 -> (2)
* from (1) and (2)
* if the n is greater than 120 the answer should be = 3 (smallest cycle ex: 1->2->3->1)
* otherwise we can calculate it using BFS
*/
int n,ans=121; cin>>n;
vector<long long> v;
for(int i=0;i<n;i++){
long long u;
cin>>u;
if(u){// corner case
if(v.size()<121) v.push_back(u);
else {
cout<<3;
return 0;
}
}
}
n=v.size();
for(int i=0;i<n;i++)
ans=min(ans,bfs(i,n,v));
cout<<(ans==121?-1:ans);
return 0;
}
LyoqCiAqIGNyZWF0ZWQgYnkgOiBNb3N0YWZhIFdhZWwgKFBob2VuaXgpCiAqIHByb2JsZW0gbmFtZSA6IHNob3J0ZXN0IGN5Y2xlIAogKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBiZnMoaW50IHNvdXJjZSxpbnQgbix2ZWN0b3I8bG9uZyBsb25nPiZ2KXsKICAgIHZlY3RvcjxpbnQ+ZGlzdGFuY2UobiwtMSkscGFyZW50KG4sLTEpOwogICAgZGlzdGFuY2Vbc291cmNlXSA9IDA7CiAgICBxdWV1ZTxpbnQ+cTsKICAgIHEucHVzaChzb3VyY2UpOwogICAgd2hpbGUoIXEuZW1wdHkoKSl7CiAgICAgICAgaW50IHg9cS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgeT0wO3k8bjt5KyspewogICAgICAgICAgICAvLyB5ID09IHggc2VsZiBjeWNsZSBpbnZhbGlkICwgcGFyZW50IFt4XSA9PSB5IGN5Y2xlIGxpa2UgMS0+Mi0+MSBpbnZhbGlkICwgdlt4XSZ2W3ldPT0wIHRoZXJlIGlzIG5vdCBlZGdlIGJldHdlZW4gdHdvIG5vZGVzCiAgICAgICAgICAgIGlmKHk9PXh8fHBhcmVudFt4XT09eXx8ISh2W3ldJnZbeF0pKSBjb250aW51ZTsKICAgICAgICAgICAgaWYofmRpc3RhbmNlW3ldKSByZXR1cm4gZGlzdGFuY2VbeV0rZGlzdGFuY2VbeF0rMTsvLyBsZW5ndGggb2YgY3ljbGUgCiAgICAgICAgICAgIGRpc3RhbmNlW3ldPWRpc3RhbmNlW3hdKzE7CiAgICAgICAgICAgIHBhcmVudFt5XT14OwogICAgICAgICAgICBxLnB1c2goeSk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDEyNTsKfQppbnQgbWFpbigpCnsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgLyoqCiAgICAgKiAgaWYgaSB3YW50IHRvIG1ha2UgYW4gZWRnZSBiZXR3ZWVuIHR3byBub2RlIHRoZW4gKCYpIGJldHdlZW4gdGhlbSBhdCBsZWFzdCA9IDEgLT4gKDEpIAogICAgICogIGZvciBleGFtcGxlIDogKHdvcnN0IGNhc2UpCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMDAxCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMDAxCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMDEwCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMDEwCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMTAwCiAgICAgKiAgMC4uLi4uMDAwMDAwMDAwMDAwMTAwCiAgICAgKiAgLi4uIAogICAgICogIDEwLi4uLi4uMDAwMDAwMDAwMDAwMAogICAgICogIDEwMC4uLi4uMDAwMDAwMDAwMDAwMAogICAgICogIGxvZzIoMTBeMTgpID0gNjAgLT4gKDIpCiAgICAgKiAgZnJvbSAoMSkgYW5kICgyKSAKICAgICAqICBpZiB0aGUgbiBpcyBncmVhdGVyIHRoYW4gMTIwIHRoZSBhbnN3ZXIgc2hvdWxkIGJlID0gMyAoc21hbGxlc3QgY3ljbGUgZXg6IDEtPjItPjMtPjEpCiAgICAgKiAgb3RoZXJ3aXNlIHdlIGNhbiBjYWxjdWxhdGUgaXQgdXNpbmcgQkZTIAogICAgICovCiAgICBpbnQgbixhbnM9MTIxOyBjaW4+Pm47CiAgICB2ZWN0b3I8bG9uZyBsb25nPiB2OwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgbG9uZyBsb25nIHU7CiAgICAgICAgY2luPj51OwogICAgICAgIGlmKHUpey8vIGNvcm5lciBjYXNlIAogICAgICAgICAgICBpZih2LnNpemUoKTwxMjEpIHYucHVzaF9iYWNrKHUpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGNvdXQ8PDM7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIG49di5zaXplKCk7CiAgICBmb3IoaW50IGk9MDtpPG47aSsrKQogICAgYW5zPW1pbihhbnMsYmZzKGksbix2KSk7CiAgICBjb3V0PDwoYW5zPT0xMjE/LTE6YW5zKTsKICAgIHJldHVybiAwOwp9Cg==