P15745 [JAG 2024 Summer Camp #3] Commutativity

题目描述

给定一个函数 $F: \{1, 2, \ldots, N\} \rightarrow \{1, 2, \ldots, N\}$。换言之,$F$ 是一个接收 $1$ 到 $N$ 之间(含端点)的整数 $x$ 并返回 $1$ 到 $N$ 之间(含端点)的整数 $F(x)$ 的函数。你的任务是计算满足 $F$ 与 $G$ 在复合运算下可交换的函数 $G: \{1, 2, \ldots, N\} \rightarrow \{1, 2, \ldots, N\}$ 的数量:即对于任意 $x \in \{1, 2, \ldots, N\}$,都有 $F(G(x)) = G(F(x))$ 成立。由于这个数可能很大,请输出答案对 $998,244,353$ 取模的结果。

输入格式

输入包含一个单独的测试用例,格式如下: $$ \begin{aligned} & N \\ & F_{1} \ F_{2} \ \ldots \ F_{N} \end{aligned} $$ 第一行包含一个整数 $N$,取值范围为 $1$ 到 $5,000$(含端点)。第二行包含 $N$ 个正整数 $F_{1}, F_{2}, \ldots, F_{N}$。对于每个 $i \ (1 \leq i \leq N)$,$F_{i}$ 表示 $F(i)$ 的值。保证 $1 \leq F_{i} \leq N$。

输出格式

输出满足条件的函数 $G: \{1, 2, \ldots, N\} \rightarrow \{1, 2, \ldots, N\}$ 的数量,结果对 $998,244,353$ 取模。