만드는 중입니다

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

트리

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

요약
각 n에 대해 문제의 규칙대로 두 루트 트리를 만들 때 한쪽에서 잎인 정점이 다른 쪽에서는 잎이 아니게 되는 방법의 수를 M으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 9점

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

문제

다음과 같은 방식으로 nn개의 정점을 가진 루트가 있는 트리 두 개를 만든다.

첫 번째 트리는 다음과 같이 만든다.

  1. 정점 11이 트리의 루트이다.
  2. 모든 i∈[2,n]i \in [2,n]에 대해, [1,i−1][1,i-1]에서 정점 하나를 골라 ii의 부모로 정한다.

두 번째 트리는 다음과 같이 만든다.

  1. 정점 nn이 트리의 루트이다.
  2. 모든 i∈[1,n−1]i \in [1,n-1]에 대해, [i+1,n][i+1,n]에서 정점 하나를 골라 ii의 부모로 정한다.

트리를 만드는 방식이 좋다는 것은 다음 조건을 만족할 때, 그리고 그때만 참이다. 첫 번째 트리에서 리프인 모든 정점 ii는 두 번째 트리에서 리프가 아니고, 첫 번째 트리에서 리프가 아닌 모든 정점 ii는 두 번째 트리에서 리프이다. 각 트리의 루트는 인접한 간선의 수와 관계없이 리프가 아니다.

이제 각 n∈[2,N]n \in [2,N]의 좋은 방식의 수를 계산한다. 두 방식은 두 트리 중 적어도 하나에서 정점 ii의 부모가 다르게 정해진 정점 ii가 존재할 때, 그리고 그때만 서로 다르다. 답을 MM으로 나눈 나머지를 출력한다.

입력

첫째 줄에 두 정수 NN과 MM이 주어진다. (2≤N≤5002 \le N \le 500, 10≤M≤23010 \le M \le 2^{30})

출력

n=2,3,…,Nn=2,3,\ldots,N에 대한 답을 한 줄에 하나씩, 총 N−1N-1줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 998244353
    
    예상 출력
    1
    2
    12
    120