← Home
For problem statement at 2000-2999/2000-2099/2040-2049/2043/problemF.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2040-2049/2043/verifierF.go ends with All tests passed. can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

func readInt(in *bufio.Reader) int {
	n := 0
	b, err := in.ReadByte()
	for err == nil && (b < '0' || b > '9') {
		b, err = in.ReadByte()
	}
	for err == nil && b >= '0' && b <= '9' {
		n = n*10 + int(b-'0')
		b, err = in.ReadByte()
	}
	return n
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	n := readInt(in)
	q := readInt(in)

	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = readInt(in)
	}

	pref := make([][51]int32, n+1)
	for i := 0; i < n; i++ {
		pref[i+1] = pref[i]
		pref[i+1][a[i]]++
	}

	MOD := int64(998244353)
	elements := make([]int, 0, 50)
	var dp [8][64]int32

	for i := 0; i < q; i++ {
		l := readInt(in)
		r := readInt(in)

		l--
		f0 := pref[r][0] - pref[l][0]
		segLen := r - l

		if f0 > 0 {
			fmt.Fprintln(out, segLen-1, f0)
			continue
		}

		var pairs int64
		elements = elements[:0]
		for v := 1; v <= 50; v++ {
			c := int64(pref[r][v] - pref[l][v])
			if c > 1 {
				pairs += c * (c - 1) / 2
			} else if c == 1 {
				elements = append(elements, v)
			}
		}

		if pairs > 0 {
			fmt.Fprintln(out, segLen-2, pairs%MOD)
			continue
		}

		dp = [8][64]int32{}
		dp[0][0] = 1
		max_i := 0
		for _, x := range elements {
			for k := max_i; k >= 0; k-- {
				dpi := &dp[k]
				dpi1 := &dp[k+1]
				for j := 0; j < 64; j++ {
					if v := dpi[j]; v > 0 {
						dpi1[j^x] += v
					}
				}
			}
			if max_i < 6 {
				max_i++
			}
		}

		found := false
		for k := 3; k <= 7; k++ {
			if dp[k][0] > 0 {
				fmt.Fprintln(out, segLen-k, int64(dp[k][0])%MOD)
				found = true
				break
			}
		}

		if !found {
			fmt.Fprintln(out, -1)
		}
	}
}