[AGC008E] Next or Nextnext
题意翻译
给定正整数 $n$ 和一个长度为 $n$ 的序列 $a$,问有多少长度为 $n$ 的排列 $p$,满足对于任意 $i$ 有 $p_i=a_i$ 或 $p_{p_i}=a_i$。
答案对 $10^9+7$ 取模。
$n \leq 10^5$。
题目描述
[problemUrl]: https://atcoder.jp/contests/agc008/tasks/agc008_e
長さ $ N $ の数列 $ a $ が与えられます。 $ 1 $ から $ N $ までの整数の順列 $ p $ であって、次の条件を満たすものは何通りでしょうか? $ 10^9\ +\ 7 $ で割った余りを求めてください。
- 各 $ 1\ <\ =\ i\ <\ =\ N $ について、$ p_i\ =\ a_i $ または $ p_{p_i}\ =\ a_i $ の少なくとも一方が成り立つ。
输入输出格式
输入格式
入力は以下の形式で標準入力から与えられる。
> $ N $ $ a_1 $ $ a_2 $ $ ... $ $ a_N $
输出格式
条件を満たす順列 $ p $ の個数を $ 10^9\ +\ 7 $ で割った余りを出力せよ。
输入输出样例
输入样例 #1
3
1 2 3
输出样例 #1
4
输入样例 #2
2
1 1
输出样例 #2
1
输入样例 #3
3
2 1 1
输出样例 #3
2
输入样例 #4
3
1 1 1
输出样例 #4
0
输入样例 #5
13
2 1 4 3 6 7 5 9 10 8 8 9 11
输出样例 #5
6
说明
### 制約
- $ 1\ <\ =\ N\ <\ =\ 10^5 $
- $ a_i $ は整数である。
- $ 1\ <\ =\ a_i\ <\ =\ N $
### Sample Explanation 1
次の $ 4 $ 通りです。 - $ (1,\ 2,\ 3) $ - $ (1,\ 3,\ 2) $ - $ (3,\ 2,\ 1) $ - $ (2,\ 1,\ 3) $ たとえば $ (1,\ 3,\ 2) $ は、$ p_1\ =\ 1 $, $ p_{p_2}\ =\ 2 $, $ p_{p_3}\ =\ 3 $ となっています。
### Sample Explanation 2
次の $ 1 $ 通りです。 - $ (2,\ 1) $
### Sample Explanation 3
次の $ 2 $ 通りです。 - $ (2,\ 3,\ 1) $ - $ (3,\ 1,\ 2) $