← Home
For problem statement at 1000-1999/1400-1499/1490-1499/1495/problemD.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1490-1499/1495/verifierD.go ends with All 100 tests passed can you fix the verifier? package main

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

const MOD = 998244353

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

	var n, m int
	if _, err := fmt.Fscan(reader, &n, &m); err != nil {
		return
	}

	adj := make([][]int, n+1)
	for i := 0; i < m; i++ {
		var u, v int
		fmt.Fscan(reader, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	D := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		D[i] = make([]int, n+1)
		for j := 1; j <= n; j++ {
			D[i][j] = -1
		}
		D[i][i] = 0
		q := []int{i}
		for len(q) > 0 {
			u := q[0]
			q = q[1:]
			for _, v := range adj[u] {
				if D[i][v] == -1 {
					D[i][v] = D[i][u] + 1
					q = append(q, v)
				}
			}
		}
	}

	parents := make([][][]int, n+1)
	for i := 1; i <= n; i++ {
		parents[i] = make([][]int, n+1)
		for v := 1; v <= n; v++ {
			for _, p := range adj[v] {
				if D[i][p] == D[i][v]-1 {
					parents[i][v] = append(parents[i][v], p)
				}
			}
		}
	}

	f := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		f[i] = make([]int, n+1)
		for j := 1; j <= n; j++ {
			dist := D[i][j]
			countOnPath := 0
			for v := 1; v <= n; v++ {
				if D[i][v]+D[j][v] == dist {
					countOnPath++
				}
			}

			if countOnPath > dist+1 {
				f[i][j] = 0
				continue
			}

			ans := 1
			for v := 1; v <= n; v++ {
				if D[i][v]+D[j][v] > dist {
					validParents := 0
					for _, p := range parents[i][v] {
						if D[j][p] == D[j][v]-1 {
							validParents++
						}
					}
					ans = (ans * validParents) % MOD
					if ans == 0 {
						break
					}
				}
			}
			f[i][j] = ans
		}
	}

	for i := 1; i <= n; i++ {
		for j := 1; j <= n; j++ {
			if j > 1 {
				fmt.Fprint(writer, " ")
			}
			fmt.Fprint(writer, f[i][j])
		}
		fmt.Fprintln(writer)
	}
}