#agc008e. [agc008_e]Next or Nextnext

[agc008_e]Next or Nextnext

問題文

長さ NN の数列 aa が与えられます。 11 から NN までの整数の順列 pp であって、次の条件を満たすものは何通りでしょうか? 109+710^9 + 7 で割った余りを求めてください。

  • 1iN1 ≤ i ≤ N について、pi=aip_i = a_i または ppi=aip_{p_i} = a_i の少なくとも一方が成り立つ。

制約

  • 1N1051 ≤ N ≤ 10^5
  • aia_i は整数である。
  • 1aiN1 ≤ a_i ≤ N

入力

入力は以下の形式で標準入力から与えられる。

NN a1a_1 a2a_2 ...... aNa_N

出力

条件を満たす順列 pp の個数を 109+710^9 + 7 で割った余りを出力せよ。


入力例 1

3
1 2 3

出力例 1

4

次の 44 通りです。

  • (1,2,3)(1, 2, 3)
  • (1,3,2)(1, 3, 2)
  • (3,2,1)(3, 2, 1)
  • (2,1,3)(2, 1, 3)

たとえば (1,3,2)(1, 3, 2) は、p1=1p_1 = 1, pp2=2p_{p_2} = 2, pp3=3p_{p_3} = 3 となっています。


入力例 2

2
1 1

出力例 2

1

次の 11 通りです。

  • (2,1)(2, 1)

入力例 3

3
2 1 1

出力例 3

2

次の 22 通りです。

  • (2,3,1)(2, 3, 1)
  • (3,1,2)(3, 1, 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