#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
int add(int x, int y) {
	x += y;
	if (x >= mod) x -= mod;
	return x;
}
int sub(int x, int y) {
	x -= y;
	if (x < 0) x += mod;
	return x;
}
int mul(int x, int y) {
	return (x * 1LL * y) % mod;
}

int n;
int arr[500005];
int sum[500005];

pair<int, int> tree[1 << 21];
int doneUpdates[1 << 21];
int updates;

void propagate(int ind) {
	int toDo = updates - doneUpdates[ind];
	doneUpdates[ind] = updates;
	tree[ind].first = add(tree[ind].first, mul(tree[ind].second, toDo));
}

void update(int ind, int val) {
	propagate(ind);
	tree[ind].second = add(tree[ind].second, val);
}

void apply() {
	updates++;
}

int get(int ind) {
	propagate(ind);
	return tree[ind].first;
}

int main() {
	ios::sync_with_stdio(false);

	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%d", arr + i), sum[i] = arr[i];
	for (int i = 1; i < n; i++) sum[i] ^= sum[i - 1];

	int ans = 0;
	int z = 0;
	for (int i = n - 1; i >= 0; i--) {
		int val = sum[i];
		if (val == 0) {
			apply();
			if (sum[n - 1] == 0) {
				int tmp = z; if (i == n - 1) tmp = 1;
				z = add(tmp, z);
				ans = add(ans, tmp);
			}
		}
		else {
			int tmp = get(val);
			if (sum[n - 1] == 0) tmp = add(tmp, 1);
			else if (i == n - 1) tmp = 1;
			ans = add(ans, tmp);
			update(val, tmp);
		}
	}
	cout << ans << endl;
	return 0;
}
