← Home
For problem statement at 2000-2999/2000-2099/2020-2029/2028/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2020-2029/2028/verifierE.go ends with All tests passed. can you fix the verifier? package main

import (
	"io"
	"os"
	"strconv"
)

const MOD int64 = 998244353
const MAXN = 200005

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		c := fs.data[fs.idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.idx++
	}
	return val
}

func main() {
	inv := make([]int64, MAXN+1)
	inv[1] = 1
	for i := 2; i <= MAXN; i++ {
		inv[i] = MOD - (MOD/int64(i))*inv[int(MOD%int64(i))]%MOD
	}

	fs := NewFastScanner()
	t := fs.NextInt()
	out := make([]byte, 0, 1<<22)

	for ; t > 0; t-- {
		n := fs.NextInt()
		g := make([][]int, n+1)
		for i := 0; i < n-1; i++ {
			u := fs.NextInt()
			v := fs.NextInt()
			g[u] = append(g[u], v)
			g[v] = append(g[v], u)
		}

		parent := make([]int, n+1)
		order := make([]int, 0, n)
		stack := make([]int, 1, n)
		stack[0] = 1
		parent[1] = -1

		for len(stack) > 0 {
			v := stack[len(stack)-1]
			stack = stack[:len(stack)-1]
			order = append(order, v)
			for _, to := range g[v] {
				if to != parent[v] {
					parent[to] = v
					stack = append(stack, to)
				}
			}
		}

		h := make([]int, n+1)
		for i := n - 1; i >= 0; i-- {
			v := order[i]
			minH := n + 1
			cnt := 0
			for _, to := range g[v] {
				if to != parent[v] {
					cnt++
					if h[to] < minH {
						minH = h[to]
					}
				}
			}
			if cnt == 0 {
				h[v] = 0
			} else {
				h[v] = minH + 1
			}
		}

		ans := make([]int64, n+1)
		ans[1] = 1
		for _, v := range order {
			for _, to := range g[v] {
				if to != parent[v] {
					if h[to] == 0 {
						ans[to] = 0
					} else {
						ans[to] = ans[v] * int64(h[to]) % MOD * inv[h[to]+1] % MOD
					}
				}
			}
		}

		for i := 1; i <= n; i++ {
			out = strconv.AppendInt(out, ans[i], 10)
			if i == n {
				out = append(out, '\n')
			} else {
				out = append(out, ' ')
			}
		}
	}

	os.Stdout.Write(out)
}