만드는 중입니다

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

모두를 위한 정의

시간 제한10초메모리 제한512 MB

요약
서로 다른 a 값들을 매번 두 원소씩 1 증가시키면서 모든 값이 항상 서로 다르게 유지되도록 b로 만드는 순서의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

책상 위에 서로 다른 nn개의 수가 있고, 이를 a1,a2,…,ana_1, a_2, \ldots, a_n으로 나타내자(순서가 중요하다). 한 번의 턴에서는 서로 다른 두 인덱스 i1<i2i_1 < i_2를 고르고, ai1a_{i_1}과 ai2a_{i_2}를 동시에 1씩 증가시킬 수 있다. 유일한 조건은 책상 위의 수들이 매 순간 서로 달라야 한다는 것이다. 과제는 정확히 이 순서대로 서로 다른 수 b1,b2,…,bnb_1, b_2, \ldots, b_n을 얻는 방법의 수를 구하는 것이다. 이 수는 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

첫 줄에 정수 nn(1≤n≤301 \le n \le 30)이 주어진다. 둘째 줄과 셋째 줄에는 각각 공백으로 구분된 정수 nn개가 주어지며, 차례로 배열 aia_i와 bib_i를 나타낸다(1≤ai,bi≤2001 \le a_i, b_i \le 200). 모든 aia_i는 서로 다르고, 모든 bib_i도 서로 다르다.

출력

소수 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서는 연산을 {2,3},{1,3},{1,2}\{2, 3\}, \{1, 3\}, \{1, 2\} 순서로 수행하는 방법만 있다. 세 번째 예제에서는 세 연산 {1,2},{2,3},{1,3}\{1, 2\}, \{2, 3\}, \{1, 3\}을 어떤 순서로 수행해도 된다.

예제3

  1. 예제 1

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

    입력
    3
    1 2 3
    7 8 9
    
    예상 출력
    42
    
  3. 예제 3

    입력
    3
    1 4 7
    3 6 9
    
    예상 출력
    6