#include using namespace std; const long long MOD = 1000000007; struct binary_indexed_tree{ int N; vector BIT; binary_indexed_tree(int N): N(N), BIT(N + 1, 0){ } void add(int i, long long x){ i++; while (i <= N){ BIT[i] += x; BIT[i] %= MOD; i += i & -i; } } long long sum(int i){ long long ans = 0; while (i > 0){ ans += BIT[i]; ans %= MOD; i -= i & -i; } return ans; } long long sum(int L, int R){ return (sum(R) + MOD - sum(L)) % MOD; } }; int main(){ int N; cin >> N; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector X(N + 1); X[0] = 0; for (int i = 0; i < N; i++){ X[i + 1] = X[i] ^ A[i]; } map pr; binary_indexed_tree dp(N); dp.add(0, 1); for (int i = 1; i < N; i++){ long long tmp = dp.sum(pr[X[i]], i); dp.add(i, tmp); pr[X[i]] = i; } cout << dp.sum(N) << endl; }