← Home
For problem statement at 1000-1999/1300-1399/1320-1329/1326/problemF1.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1320-1329/1326/verifierF1.go ends with All 100 tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"math/bits"
	"os"
	"sort"
)

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

	adj := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &adj[i])
	}

	dp := make([][]int64, 1<<n)
	for i := range dp {
		dp[i] = make([]int64, n)
	}
	for i := 0; i < n; i++ {
		dp[1<<i][i] = 1
	}

	for S := 1; S < (1 << n); S++ {
		for u := 0; u < n; u++ {
			if dp[S][u] > 0 {
				for v := 0; v < n; v++ {
					if (S&(1<<v)) == 0 && adj[u][v] == '1' {
						dp[S|(1<<v)][v] += dp[S][u]
					}
				}
			}
		}
	}

	B := make([][]int64, n+1)
	for i := range B {
		B[i] = make([]int64, 1<<n)
	}

	for S := 1; S < (1 << n); S++ {
		var sum int64 = 0
		for u := 0; u < n; u++ {
			sum += dp[S][u]
		}
		c := bits.OnesCount(uint(S))
		B[c][S] = sum
	}

	for c := 1; c <= n; c++ {
		for i := 0; i < n; i++ {
			for S := 0; S < (1 << n); S++ {
				if (S & (1 << i)) != 0 {
					B[c][S] += B[c][S^(1<<i)]
				}
			}
		}
	}

	memo := make(map[uint64]int64)
	g := make([]int64, 1<<(n-1))

	for x := 0; x < (1 << (n - 1)); x++ {
		var lengths []int
		cur := 1
		for i := 0; i < n-1; i++ {
			if (x & (1 << i)) != 0 {
				cur++
			} else {
				lengths = append(lengths, cur)
				cur = 1
			}
		}
		lengths = append(lengths, cur)
		sort.Ints(lengths)

		var code uint64 = 0
		for _, l := range lengths {
			code = (code << 4) | uint64(l)
		}

		if val, exists := memo[code]; exists {
			g[x] = val
		} else {
			var ans int64 = 0
			for S := 0; S < (1 << n); S++ {
				var term int64 = 1
				for _, l := range lengths {
					term *= B[l][S]
				}

				if (n-bits.OnesCount(uint(S)))%2 == 1 {
					ans -= term
				} else {
					ans += term
				}
			}
			memo[code] = ans
			g[x] = ans
		}
	}

	for i := 0; i < n-1; i++ {
		for x := 0; x < (1 << (n - 1)); x++ {
			if (x & (1 << i)) == 0 {
				g[x] -= g[x|(1<<i)]
			}
		}
	}

	out := bufio.NewWriter(os.Stdout)
	for x := 0; x < (1 << (n - 1)); x++ {
		if x > 0 {
			out.WriteByte(' ')
		}
		fmt.Fprint(out, g[x])
	}
	out.WriteByte('\n')
	out.Flush()
}
```