← Home
For problem statement at 0-999/200-299/240-249/241/problemB.txt this is a correct solution, but verifier at 0-999/200-299/240-249/241/verifierB.go ends with All 200 tests passed can you fix the verifier? ```go
package main

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

const MOD = 1000000007

var child [][2]int32
var cnt []int32
var bitCnt [][30]int32

func count(X int, A []int) int64 {
	var total int64 = 0
	for _, a := range A {
		curr := int32(0)
		for bit := 29; bit >= 0; bit-- {
			bit_a := (a >> bit) & 1
			bit_X := (X >> bit) & 1
			if bit_X == 0 {
				child_1 := child[curr][1^bit_a]
				if child_1 != 0 {
					total += int64(cnt[child_1])
				}
				curr = child[curr][bit_a]
			} else {
				curr = child[curr][1^bit_a]
			}
			if curr == 0 {
				break
			}
		}
		if curr != 0 {
			total += int64(cnt[curr])
		}
	}
	return total / 2
}

func sumXOR(K int, m int64, A []int) int64 {
	var totalSum int64 = 0
	var totalCount int64 = 0

	for _, a := range A {
		curr := int32(0)
		for bit := 29; bit >= 0; bit-- {
			bit_a := (a >> bit) & 1
			bit_K := (K >> bit) & 1
			if bit_K == 0 {
				child_1 := child[curr][1^bit_a]
				if child_1 != 0 {
					totalCount += int64(cnt[child_1])
					for b := 0; b < 30; b++ {
						c := int64(bitCnt[child_1][b])
						if (a>>b)&1 == 1 {
							c = int64(cnt[child_1]) - c
						}
						term := (c % MOD) * int64(1<<b) % MOD
						totalSum = (totalSum + term) % MOD
					}
				}
				curr = child[curr][bit_a]
			} else {
				curr = child[curr][1^bit_a]
			}
			if curr == 0 {
				break
			}
		}
	}

	totalCount /= 2
	totalSum = (totalSum * 500000004) % MOD

	rem := m - totalCount
	remMod := rem % MOD
	if remMod < 0 {
		remMod += MOD
	}

	ans := (totalSum + remMod*(int64(K)%MOD)) % MOD
	return ans
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())
	scanner.Scan()
	m, _ := strconv.ParseInt(scanner.Text(), 10, 64)

	A := make([]int, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		A[i], _ = strconv.Atoi(scanner.Text())
	}

	if m == 0 {
		fmt.Println(0)
		return
	}

	capacity := n*30 + 1
	child = make([][2]int32, 1, capacity)
	cnt = make([]int32, 1, capacity)
	bitCnt = make([][30]int32, 1, capacity)

	for _, a := range A {
		curr := int32(0)
		cnt[curr]++
		for b := 0; b < 30; b++ {
			if (a>>b)&1 == 1 {
				bitCnt[curr][b]++
			}
		}
		for bit := 29; bit >= 0; bit-- {
			bit_a := (a >> bit) & 1
			if child[curr][bit_a] == 0 {
				child = append(child, [2]int32{0, 0})
				cnt = append(cnt, 0)
				bitCnt = append(bitCnt, [30]int32{})
				child[curr][bit_a] = int32(len(child) - 1)
			}
			curr = child[curr][bit_a]
			cnt[curr]++
			for b := 0; b < 30; b++ {
				if (a>>b)&1 == 1 {
					bitCnt[curr][b]++
				}
			}
		}
	}

	var low, high int = 0, (1 << 30) - 1
	var K int = 0
	for low <= high {
		mid := low + (high-low)/2
		if count(mid, A) >= m {
			K = mid
			low = mid + 1
		} else {
			high = mid - 1
		}
	}

	ans := sumXOR(K, m, A)
	fmt.Println(ans)
}
```