만드는 중입니다

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

BFS 그래프 개수 세기

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

요약
N개의 노드를 가진 단순 무방향 그래프 중 1번 노드에서 BFS를 실행했을 때 방문 순서가 주어진 배열 A와 같은 그래프의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

너비 우선 탐색(BFS)이라는 그래프 탐색 알고리즘을 연구하고 있다. 11부터 NN까지 번호가 매겨진 NN개의 노드로 이루어진 그래프를 생각하자. 그래프는 인접 행렬 MM으로 주어지며, Mu,vM_{u,v}가 11이면 노드 uu에서 노드 vv로 이동할 수 있고, 그렇지 않으면 Mu,vM_{u,v}는 00이다. 이 알고리즘은 노드를 방문한 순서를 출력한다.

BFS(M[1..N][1..N]):
    let A be an empty array
    let Q be an empty queue

    append 1 to A
    push 1 to Q

    while Q is not empty:
        pop the front element of Q into u
        for v = 1 to N:
            if M[u][v] == 1 and v is not in A:
                append v to A
                push v to Q

    return A

11부터 NN까지의 순열이고 A1=1A_1 = 1인 배열 AA가 주어진다. BFS(M)=A\text{BFS}(M) = A를 만족하는 NN개의 노드를 가진 단순 무방향 그래프의 인접 행렬 MM의 개수를 구하라. 답은 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

단순 그래프는 자기 루프가 없고(Mi,i=0M_{i,i} = 0, 1≤i≤N1 \le i \le N), 두 노드를 잇는 간선은 최대 하나이다. 무방향 그래프에서는 1≤u<v≤N1 \le u < v \le N인 모든 u,vu, v에 대해 Mu,v=Mv,uM_{u,v} = M_{v,u}이다. 인접 행렬이 다르면 서로 다른 그래프로 본다.

입력

첫 줄에 정수 NN (2≤N≤50002 \le N \le 5000)이 주어진다.

둘째 줄에 정수 AiA_i가 NN개 주어진다. 배열 AA는 11부터 NN까지의 순열이며, A1=1A_1 = 1이다.

출력

BFS(M)=A\text{BFS}(M) = A를 만족하는 NN개의 노드를 가진 단순 무방향 그래프의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

예제4

  1. 예제 1

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

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

    입력
    5
    1 3 2 4 5
    
    예상 출력
    17
    
  4. 예제 4

    입력
    11
    1 2 3 4 5 6 7 8 9 10 11
    
    예상 출력
    379394847