만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

교환

시간 제한2초메모리 제한256 MB

요약
주어진 DFS 교환 절차를 실행한 뒤 P가 a가 되는 무방향 그래프의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
그래프, DFS, 동적 계획법, 조합론
정답자
아직 제출이 없습니다

문제

이 문제에서는 정점 nn개에 11부터 nn까지의 정수로 번호를 붙인 무방향 그래프를 다룬다. 자기 루프와 중복 간선은 없다.

주어진 그래프 GG에 대해 다음 절차를 실행할 수 있다.

function dfs(u) {
  set u to active
  for v in 1, 2, ..., n
    if (u and v are adjacent in G) and (v is inactive) {
      swap P[u] and P[v]
      dfs(v)
    }
  set u to done
}

for u in 1, 2, ..., n {
  set u to inactive
  set P[u] to u
}
for u in 1, 2, ..., n
  if u is inactive:
    dfs(u)

주어진 a1,a2,…,ana_1, a_2, \ldots, a_n에 대해, 절차를 실행한 뒤 P[1]=a1P[1] = a_1, P[2]=a2P[2] = a_2, …\ldots, P[n]=anP[n] = a_n이 되도록 하는 서로 다른 그래프 GG의 개수를 구하라. 두 그래프는 어떤 정점 쌍 (u,v)(u, v)에 대해 한쪽에만 그 간선이 있으면 서로 다르다. 그래프의 개수가 매우 클 수 있으므로, 998 244 353998\,244\,353으로 나눈 나머지를 구하라.

입력

첫 줄에 정수 nn (1≤n≤5001 \leq n \leq 500)이 주어진다.

둘째 줄에 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤n1 \leq a_i \leq n)이 주어진다. 11부터 nn까지의 각 수는 이 수열에 정확히 한 번씩 나타난다.

출력

조건을 만족하는 그래프 GG의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    3
    2 3 1
    
    예상 출력
    2
    
  2. 예제 2

    입력
    9
    7 2 9 1 3 8 6 5 4
    
    예상 출력
    3528