← Home
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()
}