#include <bits/stdc++.h>
using namespace std;
 
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
#define int long long

const int N = 5e5 + 5;
const int M = (1 << 20) + 5;
const int MOD = 1e9 + 7;

int n, x;
int a[N];
int pref[N], cnt0[N];
int dp2[M], dp20[M];
int cache[N][2];
set<int> pos[M];

int pow(int a, int b, int m)
{
	int ans=1;
	while(b)
	{
		if(b&1)
			ans=(ans*a)%m;
		b/=2;
		a=(a*a)%m;
	}
	return ans;
}

int dp(int idx, int cur)
{
	if(idx == n + 1)
		return (cur == 1);
	int &ans = cache[idx][cur];
	if(ans != -1)
		return ans;
	ans = dp(idx + 1, cur);
	if(cur == 0 && pref[idx] == 0)
		ans += dp(idx + 1, cur ^ 1);
	if(cur == 1 && pref[idx] == x)
		ans += dp(idx + 1, cur ^ 1);
	ans %= MOD;
	return ans;
}	

int get(int l, int r)
{
	return cnt0[r] - cnt0[l - 1];
}

int32_t main()
{
	IOS;
	memset(cache, -1, sizeof(cache));
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i];
		pref[i] = pref[i - 1] ^ a[i];
		cnt0[i] = cnt0[i - 1] + (pref[i] == 0);
	}
	if(pref[n] > 0)
	{
		x = pref[n];
		int ans = dp(1, 1);
		cout << ans << endl;
	}
	else
	{
		for(int i = 0; i < M; i++)
			dp20[i] = 1;
		dp2[0] = 0;
		map<int, int> prev;
		for(int i = 1; i <= n; i++)
		{
			if(prev.find(pref[i]) == prev.end())
			{
				dp2[pref[i]] = 1;
				prev[pref[i]] = i;
				continue;
			}
			dp20[pref[i]] += get(prev[pref[i]], i) * dp2[pref[i]];
			dp20[pref[i]] %= MOD;
			dp2[pref[i]] += dp20[pref[i]];
			dp2[pref[i]] %= MOD;
			prev[pref[i]] = i;
		}
		int ans = pow(2LL, cnt0[n] - 1, MOD);
		for(int i = 1; i < M; i++)
			ans += dp2[i];
		ans %= MOD;
		ans %= MOD;
		cout << ans << endl;
	}
	return 0;
}