题目描述
1 以上 N 以下の整数すべてから成る集合を S とします.
f は S から S への関数であり,f(1), f(2), ⋯, f(N) の値が f1, f2, ⋯, fN として与えられます.
S の空でない部分集合 T であって,次の両方の条件を満たすものの個数を 998244353 で割った余りを求めてください.
- 全ての a ∈ T について f(a) ∈ T である.
- 全ての a, b ∈ T について a = b ならば f(a) = f(b) である.
输入格式
入力は以下の形式で標準入力から与えられる.
N f1 f2 … fN
输出格式
S の空でない部分集合であって,両方の条件を満たすものの個数を 998244353 で割った余りを出力せよ.
题目大意
对于 i∈[1,n],有一个函数 f(i)=fi。
集合 S 定义为 i∈Z 且 i∈[1,n]。
我们称一个集合 T 为合法的,当且仅当满足如下条件:
若 a∈T,则 fa∈T
若 a,b∈T,则 fa=fb
现求 S 的非空子集中,合法的集合数。
翻译贡献者:556362
2
2 1
1
2
1 1
1
3
1 2 3
7
提示
制約
- 1 ≤ N ≤ 2 × 105
- 1 ≤ fi ≤ N
- 入力は全て整数
Sample Explanation 1
f(1) = 2, f(2) = 1 です.f(1) = f(2) であるため条件の 2 つ目は常に満たしますが,1 つ目の条件より 1, 2 は同時に T に入っている必要があります.
Sample Explanation 2
f(1) = f(2) = 1 です.1 つ目の条件のため 1 は T に属する必要があり,さらに 2 つ目の条件により 2 は T に属することはできません.
Sample Explanation 3
f(1) = 1, f(2) = 2, f(3) = 3 です.1 つ目の条件も 2 つ目の条件も常に満たされるため,S の空でない部分集合全てが条件を満たします.