#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int max_n=1<<20;
const int mod=1e9+7;
inline int Add(int x,int y)
{
    return (x+=y)>=mod?x-mod:x;
}
int n,a[max_n];
vector<int> v[max_n];
int cnt[max_n];
int dp[max_n][2];
int solve(int x)
{
    dp[0][0]=1;dp[0][1]=1;
    for(int i=1;i<v[x].size();i++)
    {
        int c=cnt[v[x][i]-1]-cnt[v[x][i-1]];
        dp[i][0]=Add(dp[i-1][0],1ll*c*dp[i-1][1]%mod);
        dp[i][1]=Add(dp[i-1][1],dp[i][0]);
    }
    return dp[v[x].size()-1][1];
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",a+i);
    for(int i=1;i<=n;i++)a[i]^=a[i-1];
    for(int i=1;i<=n;i++)v[a[i]].push_back(i);
    for(int i=1;i<=n;i++)cnt[i]=cnt[i-1]+(a[i]==0);
    if(a[n])
    {
        solve(a[n]);
        int ans=dp[v[a[n]].size()-1][1];
        if(v[a[n]].size()>1)ans=Add(ans,mod-dp[v[a[n]].size()-2][1]);
        printf("%d\n",ans);
    }
    else
    {
        int ans=1;
        for(int i=1;i<=cnt[n]-1;i++)ans=Add(ans,ans);
        for(int i=1;i<max_n;i++)
        {
            if(!v[i].empty())ans=Add(ans,solve(i));
        }
        printf("%d\n",ans);
    }
    return 0;
}