페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#4131
서브태스크

Tree Depth 2s 512MB

문제

새해를 맞아, Farmer John은 소들에게 축제 분위기의 이진 탐색 트리(BST)를 선물하기로 했다!

BST를 생성하기 위해, FJ는 먼저 정수 1\ldots N의 순열 a=\{a_1,a_2,\ldots,a_N\}을 하나 고른다. 여기서 N\le 300이다. 이후 FJ는 인자 1N으로 아래 의사코드를 실행한다.

generate(l,r):
  if l > r, return empty subtree;
  x = argmin_{l <= i <= r} a_i; // index of min a_i in {a_l,...,a_r}
  return a BST with x as the root, 
    generate(l,x-1) as the left subtree,
    generate(x+1,r) as the right subtree;

예를 들어, 순열 \{3,2,5,1,4\}는 다음과 같은 BST를 생성한다.

    4
   / \
  2   5
 / \ 
1   3

d_i(a)를 순열 a에 의해 생성된 트리에서 노드 i의 깊이(depth)라고 하자. 이는 노드 i에서 루트까지의 경로에 포함된 노드의 개수이다. 위 예시에서 d_4(a)=1, d_2(a)=d_5(a)=2, 그리고 d_1(a)=d_3(a)=3이다.

순열 a의 inversion 개수는 1\le i<j\le N이고 a_i>a_j를 만족하는 정수 쌍 (i,j)의 개수이다. 소들은 FJ가 사용할 순열 a가 정확히 K개의 inversion을 가진다는 사실을 알고 있다 (0\le K\le \frac{N(N-1)}{2}).

이 조건을 만족하는 모든 a에 대해, 각 1\le i\le N에 대하여 \sum_a d_i(a)를 계산한 뒤 M으로 나눈 나머지를 구하여라.


입력

첫 줄에 세 정수 N, K, M이 공백으로 구분되어 주어진다. M[10^8,10^9+9] 범위의 소수(prime)이다.


출력

1\le i\le N에 대해 \sum_a d_i(a)\pmod{M} 값을 N개의 정수로 공백으로 구분하여 출력한다.


부분문제

번호 점수 조건
#128점

N\le 8

#221점
N\le 20
#321점
N\le 50
#430점

추가 제약 조건이 없다.


예제 #1

3 0 192603497
1 2 3 

여기서 가능한 순열은 a=\{1,2,3\} 하나뿐이다.


예제 #2

3 1 144408983
3 4 4 

여기서 가능한 두 순열은 a=\{1,3,2\}a=\{2,1,3\}이다.


출처

USACO 2019 December Platinum

로그인해야 코드를 작성할 수 있어요.