#include using namespace std; #include using namespace atcoder; using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) #define ALL(x) (x).begin(), (x).end() #define SZ(x) (int)(x).size() using mint = modint1000000007; int main() { ll N; cin >> N; vector A(N); rep(i, N) cin >> A[i]; vector cum(N + 1, 0); rep(i, N) cum[i + 1] = cum[i] ^ A[i]; vector dp(N + 1, 0); dp[0] = 1; map Rid; vector dpcum(N + 2, 0); // dp[0,i)の和 dpcum[1] = 1; for (int i = 1; i <= N; i++) { int j = Rid[cum[i]]; // for (int k = j; k < i; k++) dp[i] += dp[k]; dp[i] = dpcum[i] - dpcum[j]; dpcum[i + 1] = dpcum[i] + dp[i]; Rid[cum[i]] = i; } mint ans = 0; for (int i = 1; i <= N; i++) { if (cum[N] == cum[i]) ans += dp[i]; } cout << ans.val() << '\n'; return 0; }