cycles
=
[]
def
DFSUtil(u, arr, vis, cyclecnt):
cycles[cyclecnt]
+
=
1
vis[u]
=
3
if
(vis[arr[u]]
=
=
3
) :
return
DFSUtil(arr[u], arr, vis, cyclecnt)
def
DFS( u, arr, vis, cyclecnt):
vis[u]
=
2
if
(vis[arr[u]]
=
=
0
) :
DFS(arr[u], arr, vis, cyclecnt)
elif
(vis[arr[u]]
=
=
1
):
vis[u]
=
1
return
else
:
cycles.append(
0
)
DFSUtil(u, arr, vis,cyclecnt)
cyclecnt
+
=
1
vis[u]
=
1
def
countWays(arr, N,cyclecnt):
ans
=
1
dp
=
[
0
]
*
(N
+
1
)
dp[
0
]
=
1
for
i
in
range
(
1
, N
+
1
):
dp[i]
=
(dp[i
-
1
]
*
2
)
vis
=
[
0
]
*
(N
+
1
)
for
i
in
range
(
1
, N
+
1
) :
if
(vis[i]
=
=
0
) :
DFS(i, arr, vis, cyclecnt)
cnt
=
N
for
i
in
range
(
len
(cycles)) :
cnt
-
=
cycles[i]
ans
*
=
dp[cycles[i]]
-
2
ans
=
(ans
*
dp[cnt])
return
ans
if
__name__
=
=
"__main__"
:
N
=
3
cyclecnt
=
0
arr
=
[
0
,
2
,
3
,
1
]
print
(countWays(arr, N,cyclecnt))