← Home
For problem statement at 1000-1999/1600-1699/1620-1629/1620/problemG.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1620-1629/1620/verifierG.go ends with All 100 tests passed can you fix the verifier? package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)

	var v [23][26]int16
	for i := 0; i < n; i++ {
		var s string
		fmt.Fscan(reader, &s)
		for j := 0; j < len(s); j++ {
			v[i][s[j]-'a']++
		}
	}

	f := make([]uint32, 1<<n)

	var dfs func(idx int, mask int, parity int, current_min *[26]int16)
	dfs = func(idx int, mask int, parity int, current_min *[26]int16) {
		if idx == n {
			if mask != 0 {
				prod := uint32(1)
				for c := 0; c < 26; c++ {
					prod = uint32((uint64(prod) * uint64(current_min[c]+1)) % 998244353)
				}
				if parity == 0 {
					prod = 998244353 - prod
					if prod == 998244353 {
						prod = 0
					}
				}
				f[mask] = prod
			}
			return
		}

		dfs(idx+1, mask, parity, current_min)

		var next_min [26]int16
		for c := 0; c < 26; c++ {
			if current_min[c] < v[idx][c] {
				next_min[c] = current_min[c]
			} else {
				next_min[c] = v[idx][c]
			}
		}
		dfs(idx+1, mask|(1<<idx), 1-parity, &next_min)
	}

	var init_min [26]int16
	for c := 0; c < 26; c++ {
		init_min[c] = 20005
	}
	dfs(0, 0, 0, &init_min)

	for i := 0; i < n; i++ {
		bit := 1 << i
		for mask := 0; mask < (1<<n); mask += (bit << 1) {
			for j := 0; j < bit; j++ {
				f[mask|bit|j] += f[mask|j]
				if f[mask|bit|j] >= 998244353 {
					f[mask|bit|j] -= 998244353
				}
			}
		}
	}

	sum_i := make([]uint32, 1<<n)
	k_count := make([]uint32, 1<<n)
	for i := 0; i < n; i++ {
		bit := 1 << i
		for mask := 0; mask < bit; mask++ {
			sum_i[mask|bit] = sum_i[mask] + uint32(i+1)
			k_count[mask|bit] = k_count[mask] + 1
		}
	}

	var ans uint64
	for mask := 1; mask < (1 << n); mask++ {
		val := uint64(f[mask])
		res := val * uint64(k_count[mask]) * uint64(sum_i[mask])
		ans ^= res
	}

	fmt.Println(ans)
}