P9669 [ICPC 2022 Jinan R] DFS Order 2
题目描述
P 有一棵树,根节点是 $1$ ,总共有 $n$ 个节点,从 $1$ 到 $n$ 编号。
他想从根节点开始进行深度优先搜索。他想知道对于每个节点 $v$,在深度优先搜索中,它出现在第 $j$ 个位置的方式有多少种。深度优先搜索的顺序是在搜索过程中访问节点的顺序。节点出现在第 $j\,(1 \le j \le n)$ 个位置表示它在访问了 $j - 1$ 个其他节点之后才被访问。因为节点的子节点可以以任意顺序访问,所以有多种可能的深度优先搜索顺序。
P 想知道对于每个节点 $v$,有多少种不同的深度优先搜索顺序,使得 $v$ 出现在第 $j$ 个位置。对于每个 $v$ 和 $j\,(i \le v,j \le n)$,计算答案。答案可能很大,所以输出时要取模 $998\,244\,353$。
以下是深度优先搜索的伪代码,用于处理树。在调用 $\textbf{main()}$ 函数后,$\texttt{dfs\_order}$ 将会包含深度优先搜索的顺序。

输入格式
第一行包含一个整数 $n\,(1\le n\le 500)$,表示树中的节点数量。
接下来的n-1行描述了树的边。第i行包含两个整数 $u_i$ 和 $v_i$,表示连接的两个节点的标签 $(1\le u_i,v_i\le n,u_i\not=v_i)$。
保证给定的边构成一棵树。
输出格式
对于每个从 $1$ 到 $n$ 的节点 $v$,输出一行,包含 $n$ 个整数,取模 $998\,244\,353$。在第 $v$ 行中,第 $j$ 个整数表示不同的深度优先搜索顺序中,节点 $v$ 出现在第 $j$ 个位置的数量。
翻译由 @ayf2192538031 提供。