#include <bits/stdc++.h>
#define MOD 1000000007
 
using namespace std;
typedef long long int ll;
typedef pair <int,int> P;
 
int A[500005];
vector <int> pos[500005];
int sum[500005];
 
int get(int s,int t)
{
	if(s>t) return 0;
	return sum[t]-sum[s-1];
}
int main()
{
	int n;
	scanf("%d",&n);
	vector <int> pxor;
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		A[i]=A[i-1]^x;
		pxor.push_back(A[i]);
	}
	pxor.push_back(0);
	sort(pxor.begin(),pxor.end());
	pxor.erase(unique(pxor.begin(),pxor.end()),pxor.end());
	
	for(int i=1;i<=n;i++)
	{
		A[i]=lower_bound(pxor.begin(),pxor.end(),A[i])-pxor.begin();
		pos[A[i]].push_back(i);
		sum[i]=sum[i-1]+(A[i]==0);
	}
	//for(int i=0;i<n;i++) printf("%d ",A[i]);puts("");
	ll ret=0;
	if(A[n]==0)//all 0
	{
		int cnt=pos[0].size()-1;
		ret=1;
		for(int i=0;i<cnt;i++) ret=ret*2LL%MOD;
	}
	
	for(int i=1;i<pxor.size();i++)
	{
		if(A[n]!=0&&A[n]!=i) continue;
		ll odd=0,even=1;
		int bef=0;
		for(int j=0;j<pos[i].size();j++)
		{
			int to=pos[i][j];
			even+=odd*(ll) get(bef,to-1)%MOD;
			if(even>=MOD) even-=MOD;
			odd+=even;
			if(odd>=MOD) odd-=MOD;
			bef=to+1;
		}
		if(A[n]==0)
		{
			ret+=odd;
			ret%=MOD;
		}
		else
		{
			ret+=even;
			ret%=MOD;
		}
	}
	printf("%lld\n",ret);
}