package main
import (
"bufio"
"fmt"
"io"
"math/bits"
"os"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
nextInt := func() int {
for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
idx++
}
val := 0
for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
val = val*10 + int(data[idx]-'0')
idx++
}
return val
}
n := nextInt()
a := make([]int, n+1)
msb := make([]int, n+1)
pref := make([]int64, n+1)
for i := 1; i <= n; i++ {
v := nextInt()
a[i] = v
msb[i] = bits.Len(uint(v)) - 1
pref[i] = pref[i-1] + int64(v)
}
var ans int64
pos := make([]int, 0)
for k := 0; k < 30; k++ {
i := 1
for i <= n {
for i <= n && msb[i] > k {
i++
}
if i > n {
break
}
L := i
pos = pos[:0]
for i <= n && msb[i] <= k {
if msb[i] == k {
pos = append(pos, i)
}
i++
}
R := i - 1
m := len(pos)
if m == 0 {
continue
}
for t, p := range pos {
left := L
if t > 0 {
left = pos[t-1] + 1
}
for l := left; l <= p-2; l++ {
if pref[p-1]-pref[l] == int64(a[l]^a[p]) {
ans++
}
}
right := R
if t+1 < m {
right = pos[t+1] - 1
}
for r := p + 2; r <= right; r++ {
if pref[r-1]-pref[p] == int64(a[p]^a[r]) {
ans++
}
}
}
for t := 0; t+1 < m; t++ {
p := pos[t]
q := pos[t+1]
if q-p >= 2 && pref[q-1]-pref[p] == int64(a[p]^a[q]) {
ans++
}
left := L
if t > 0 {
left = pos[t-1] + 1
}
for l := left; l <= p-1; l++ {
if pref[q-1]-pref[l] == int64(a[l]^a[q]) {
ans++
}
}
right := R
if t+2 < m {
right = pos[t+2] - 1
}
for r := q + 1; r <= right; r++ {
if pref[r-1]-pref[p] == int64(a[p]^a[r]) {
ans++
}
}
}
for t := 0; t+2 < m; t++ {
p := pos[t]
r := pos[t+2]
if pref[r-1]-pref[p] == int64(a[p]^a[r]) {
ans++
}
}
}
}
out := bufio.NewWriter(os.Stdout)
fmt.Fprint(out, ans)
out.Flush()
}