← 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') && data[idx] != '-' {
			idx++
		}
		sign := 1
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return sign * val
	}

	t := nextInt()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	for ; t > 0; t-- {
		n := nextInt()
		a := make([]int, n+1)
		top := make([]int, n+1)
		for i := 1; i <= n; i++ {
			a[i] = nextInt()
			top[i] = bits.Len(uint(a[i])) - 1
		}

		q := make([]byte, n+1)
		suf0 := make([]int64, n+2)
		suf1 := make([]int64, n+2)

		var ans int64
		for b := 0; b < 30; b++ {
			q[0] = 0
			for i := 1; i <= n; i++ {
				q[i] = q[i-1] ^ byte((a[i]>>b)&1)
			}

			suf0[n+1] = 0
			suf1[n+1] = 0
			for i := n; i >= 0; i-- {
				suf0[i] = suf0[i+1]
				suf1[i] = suf1[i+1]
				if q[i] == 0 {
					suf0[i]++
				} else {
					suf1[i]++
				}
			}

			var left0 int64 = 1
			var left1 int64 = 0
			for i := 1; i <= n; i++ {
				if top[i] == b {
					ans += left0*suf0[i] + left1*suf1[i]
				}
				if q[i] == 0 {
					left0++
				} else {
					left1++
				}
			}
		}

		fmt.Fprintln(out, ans)
	}
}