조 나누기

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

요약
M=1부터 N까지 각 M에 대해, 아무도 싫어하는 학생과 같은 조가 되지 않도록 N명을 M개의 비지 않은 조로 나누는 경우의 수를 998244353으로 나눈 나머지를 구한다.
난이도

어려움10점 중 9점

유형
조합론, 그래프, 분할 정복, 수학
정답자
아직 제출이 없습니다

문제

NN명의 BOJ 대학교 학생들을 조들로 나눠, 각자 조별 과제를 하게 하려고 한다. 그런데, 어떤 학생들은 싫어하는 학생이 한 명 존재해 그 학생과는 조원을 하지 않으려고 한다. ii번 학생이 싫어하는 학생은 A_iA\_i번 학생이다. 단, A_i=iA\_i=i인 경우는 싫어하는 학생이 존재하지 않는 경우이다.

11부터 NN까지의 각 MM에 대해, 여러분은 모든 학생이 싫어하는 학생과는 같은 조가 되지 않도록 학생들을 비지 않은 MM개의 조로 나누는 경우의 수를 구해야 한다. 조로 나누는 두 방법이 다르다는 것은 한 방법에서만 같은 조에 속하는 학생 쌍이 존재함을 의미한다.

입력

첫 번째 줄에 NN이 주어진다.

두 번째 줄에 A_1,…,A_NA\_1,\dots ,A\_N이 공백으로 구분되어 주어진다.

출력

M=1M=1부터 NN까지 순서대로 학생들을 MM개의 조로 나누는 경우의 수를 소수 998244353998244353로 나눈 나머지를 공백으로 구분하여 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N≤500,0001\le N\le 500\\, 000
  • 1≤A_i≤N1\le A\_i\le N (1≤i≤N)(1\le i\le N)

예제3

  1. 예제 1

    입력
    10
    1 2 3 4 5 6 7 8 9 10
    
    예상 출력
    1 511 9330 34105 42525 22827 5880 750 45 1
    
  2. 예제 2

    입력
    10
    2 1 4 3 6 7 5 1 3 5
    
    예상 출력
    0 0 288 3600 9056 7846 2890 489 37 1
    
  3. 예제 3

    입력
    10
    3 1 4 1 5 9 2 6 5 3
    
    예상 출력
    0 0 192 2724 7420 6811 2625 461 36 1