배열 제작의 달인

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

요약
길이 N인 배열에서 0을 1 이상 N 이하의 정수로 바꾸어, 각 x가 x번 이하로만 등장하도록 만드는 가짓수를 998244353으로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
조합론, 동적 계획법, 수학, 정렬
정답자
아직 제출이 없습니다

문제

00 이상 NN 이하의 정수로 이루어진 길이 NN의 배열 AA가 있다.

Jiro는 값이 00인 모든 원소를 11 이상 NN 이하의 정수로 바꾸려고 한다. 이때, 바꾼 배열은 아래 조건에 맞아야 한다.

  • 11 이상 NN 이하의 각 정수 xx에 대하여, 배열 AA에 xx가 등장하는 횟수는 xx 이하이다.

Jiro가 조건에 맞게 만들 수 있는 배열의 가짓수를 998,244,353998 \\, 244 \\, 353으로 나눈 나머지를 구하시오. 998,244,353998\\,244\\,353은 소수이다.

입력

첫 번째 줄에 배열 AA의 길이 NN이 주어진다. (1≤N≤3,000)(1 \le N \le 3\\,000)

두 번째 줄에 배열 A_1A\_1, A_2A\_2, ⋯\cdots, A_NA\_N이 공백으로 구분되어 주어진다. (0≤A_i≤N)(0 \leq A\_i \leq N)

출력

첫 번째 줄에 Jiro가 조건에 맞게 만들 수 있는 배열의 가짓수를 998,244,353998 \\, 244 \\, 353으로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

    입력
    2
    1 1
    
    예상 출력
    0