CF1863G Swaps

题目描述

给定一个整数数组 $a_1, a_2, \dots, a_n$($1 \le a_i \le n$)。你可以进行若干次(也可以不进行)如下操作: - 任意选择一个 $i$,执行交换操作 $(a_i, a_{a_i})$。 你最多可以得到多少种不同的数组?请输出答案对 $10^9 + 7$ 取模后的结果。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^6$)。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le n$)。

输出格式

输出可以通过上述操作得到的不同数组的个数,对 $10^9 + 7$ 取模。

说明/提示

在第一个样例中,初始数组为 $[1, 1, 2]$。如果对 $i = 3$ 执行操作,则交换 $a_3$ 和 $a_2$,得到 $[1, 2, 1]$。可以证明没有其他可达的数组。 在第二个样例中,四种可达的数组分别为 $[2, 1, 4, 3]$,$[1, 2, 4, 3]$,$[1, 2, 3, 4]$,$[2, 1, 3, 4]$。可以证明没有其他可达的数组。 由 ChatGPT 4.1 翻译