package main
import (
"bufio"
"fmt"
"os"
)
const MOD = 998244353
func readInt(in *bufio.Reader) int {
n := 0
b, err := in.ReadByte()
if err != nil {
return 0
}
for b < '0' || b > '9' {
b, err = in.ReadByte()
if err != nil {
return 0
}
}
for '0' <= b && b <= '9' {
n = n*10 + int(b-'0')
b, err = in.ReadByte()
if err != nil {
break
}
}
return n
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 64*1024)
out := bufio.NewWriterSize(os.Stdout, 64*1024)
defer out.Flush()
t := readInt(in)
for tc := 0; tc < t; tc++ {
n := readInt(in)
pow2 := make([]int, n+1)
pow2[0] = 1
for i := 1; i <= n; i++ {
pow2[i] = (pow2[i-1] * 2) % MOD
}
pref := make([]int, n+1)
allOnes := true
K := -1
for i := 1; i <= n; i++ {
val := readInt(in)
pref[i] = pref[i-1] ^ val
if val > 1 && allOnes {
allOnes = false
K = i
}
}
if allOnes {
if n%2 != 0 {
fmt.Fprintln(out, pow2[n-1])
} else {
fmt.Fprintln(out, 0)
}
continue
}
S_all := 0
S_odd := 0
p := 0
for i := 1; i <= K; i++ {
if i == 1 {
p = 1
} else if i == 2 {
p = 1
} else {
p = (p * 2) % MOD
}
S_all = (S_all + p) % MOD
if i%2 != 0 {
S_odd = (S_odd + p) % MOD
}
}
ans := 0
for j := K; j <= n; j++ {
factor := 0
if pref[j] == 0 {
factor = 0
} else if pref[j] == 1 {
factor = S_all
} else {
factor = S_odd
}
wj := 1
if j < n {
wj = pow2[n-1-j]
}
ans = int((int64(ans) + int64(factor)*int64(wj)) % MOD)
}
fmt.Fprintln(out, ans)
}
}