配点 : 400 点
問題文
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) である.
制約
- 1≤N≤2×105
- 1≤fi≤N
- 入力は全て整数
入力
入力は以下の形式で標準入力から与えられる.
N
f1 f2 … fN
出力
S の空でない部分集合であって,両方の条件を満たすものの個数を 998244353 で割った余りを出力せよ.
2
2 1
1
f(1)=2,f(2)=1 です.f(1)=f(2) であるため条件の 2 つ目は常に満たしますが,1 つ目の条件より 1,2 は同時に T に入っている必要があります.
2
1 1
1
f(1)=f(2)=1 です.1 つ目の条件のため 1 は T に属する必要があり,さらに 2 つ目の条件により 2 は T に属することはできません.
3
1 2 3
7
f(1)=1,f(2)=2,f(3)=3 です.1 つ目の条件も 2 つ目の条件も常に満たされるため,S の空でない部分集合全てが条件を満たします.