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