#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9+7;
ll c[100],c2[100],temp[100];
ll a[100005];
bool vis[100005];
int cnt,cnt2;
int n;
ll quick(ll x,ll y){
ll res = 1;
while(y){
if(y&1){
res=res*x%mod;
}
y>>=1;
x=x*x%mod;
}
return res;
}
bool add(ll bs[],ll x){
for(int i=63;i>=0;i--){
if(x&(1ll<<i)){
if(!bs[i]){
bs[i] = x;
return true;
}
x^=bs[i];
}
}
return false;
}
int main()
{
while(scanf("%lld",&n)>0){
vector<ll> v;
v.clear();
for(int i=100;i>=0;i--)c[i]=0,c2[i]=0,temp[i] = 0;
cnt=0; cnt2 = 0;
memset(vis,false,sizeof(vis));
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
if(add(c,a[i])){
cnt++;
v.push_back(a[i]);
vis[i] = 1;
}
}
if(v.size()==n){
printf("0\n");
continue;
}
ll ans=(n-cnt)*quick(2,n-cnt-1)%mod;
for(int i=1;i<=n;i++){
if(!vis[i]){
if(add(c2,a[i]))
cnt2++;
}
}
int len = v.size();
for(int i=0;i<len;i++){
cnt = cnt2;
for(int j=0;j<64;j++){
temp[j] = c2[j];
}
for(int j=0;j<len;j++){
if(i!=j){
if(add(temp,v[j])){
cnt++;
}
}
}
if(!add(temp,v[i])){
ans+=quick(2,n-cnt-1);
if(ans>=mod)ans-=mod;
}
}
printf("%lld\n",ans%mod);
}
return 0;
}