트리
시간 제한3초메모리 제한1024 MB
각 n에 대해 문제의 규칙대로 두 루트 트리를 만들 때 한쪽에서 잎인 정점이 다른 쪽에서는 잎이 아니게 되는 방법의 수를 M으로 나눈 나머지를 구합니다.
문제
다음과 같은 방식으로 개의 정점을 가진 루트가 있는 트리 두 개를 만든다.
첫 번째 트리는 다음과 같이 만든다.
- 정점 이 트리의 루트이다.
- 모든 에 대해, 에서 정점 하나를 골라 의 부모로 정한다.
두 번째 트리는 다음과 같이 만든다.
- 정점 이 트리의 루트이다.
- 모든 에 대해, 에서 정점 하나를 골라 의 부모로 정한다.
트리를 만드는 방식이 좋다는 것은 다음 조건을 만족할 때, 그리고 그때만 참이다. 첫 번째 트리에서 리프인 모든 정점 는 두 번째 트리에서 리프가 아니고, 첫 번째 트리에서 리프가 아닌 모든 정점 는 두 번째 트리에서 리프이다. 각 트리의 루트는 인접한 간선의 수와 관계없이 리프가 아니다.
이제 각 의 좋은 방식의 수를 계산한다. 두 방식은 두 트리 중 적어도 하나에서 정점 의 부모가 다르게 정해진 정점 가 존재할 때, 그리고 그때만 서로 다르다. 답을 으로 나눈 나머지를 출력한다.
입력
첫째 줄에 두 정수 과 이 주어진다. (, )
출력
에 대한 답을 한 줄에 하나씩, 총 줄에 출력한다.