#P15745. [JAG 2024 Summer Camp #3] Commutativity

[JAG 2024 Summer Camp #3] Commutativity

说明

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

输入格式

输入包含一个单独的测试用例,格式如下:

$$\begin{aligned} & N \\ & F_{1} \ F_{2} \ \ldots \ F_{N} \end{aligned}$$

第一行包含一个整数 NN,取值范围为 115,0005,000(含端点)。第二行包含 NN 个正整数 F1,F2,,FNF_{1}, F_{2}, \ldots, F_{N}。对于每个 i (1iN)i \ (1 \leq i \leq N)FiF_{i} 表示 F(i)F(i) 的值。保证 1FiN1 \leq F_{i} \leq N

输出格式

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

5
4 5 3 2 1
5
8
2 3 1 3 6 7 5 5
64
10
3 1 4 1 5 9 2 6 5 3
64
15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
567381138