트리의 모든 부분 트리의 크기 합

NYPC 2025 · Round 2-B

다음과 같이 트리를 만들자. 먼저 00번 정점을 루트로 두자. 그 다음, 1iN11 \le i \le N - 1인 모든 정수 ii에 대해 작은 수부터 차례대로, ii번 정점을 i1K\displaystyle \left\lfloor \frac{i - 1}{K} \right\rfloor번 정점의 자식 정점으로 두자. 여기서, i1K\displaystyle \left\lfloor \frac{i - 1}{K} \right\rfloori1i - 1KK로 나눈 몫을 뜻한다. 이러한 트리는 00번부터 N1N - 1번까지 총 NN개의 정점을 가지며, 모든 정점은 최대 KK개의 자식 정점을 갖는다.

이제 우리는 이 트리의 각 정점마다, 이 정점이 루트가 되는 부분 트리의 크기를 생각해 보려고 한다. 트리의 크기는 이 트리에 포함되는 정점의 개수이다.

예를 들어, 아래와 같이 N=5;K=2N = 5; K = 2인 경우의 트리를 생각해 보자.

각 정점마다 이 정점이 루트가 되는 부분 트리의 크기는 다음과 같다.

따라서, 각각의 정점이 루트가 되는 부분 트리의 크기의 합은 5+3+1+1+1=115 + 3 + 1 + 1 + 1 = 11이다.

이 값이 매우 커질 수 있으므로, 우리는 이 값을 PP로 나눈 나머지를 알고 싶다.

N,K,PN, K , P가 주어졌을 때, 각각의 정점이 루트가 되는 부분 트리의 크기의 합을 PP로 나눈 나머지를 구하는 프로그램을 작성하라.

입력 형식

첫 줄에 테스트 케이스의 수를 나타내는 정수 TT가 주어진다. (1T2500001 \le T \le 250\,000)

그다음 TT줄 각각마다 테스트케이스에 대한 정보가 주어진다. 각 줄에는 트리의 정점 수, 정점의 최대 자식 수, 나누는 수를 나타내는 세 정수 N,K,PN, K , P가 공백으로 구분되어 차례대로 주어진다. (1N,K1018;1 \le N, K \le 10^{18}; 1P10000000001 \le P \le 1\,000\,000\,000)

출력 형식

각 테스트 케이스의 결과를 한 줄에 출력한다. 출력은 테스트 케이스에서 주어진 트리의 각 정점이 루트가 되는 서브트리의 크기의 총합을 주어진 PP로 나눈 나머지이다.

예제 1

입력

1 5 2 17

출력

11

예제 2

입력

3 13 3 37 13 3 13 13 3 5

출력

34 8 4

예제 설명

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 17

모든 테스트 케이스에서의 NN의 합은 10000001\,000\,000 이하이다.

종류 2: 16

모든 테스트 케이스에서의 KK가 모두 같다. N1000000N \le 1\,000\,000

종류 3: 20

K=2K = 2

종류 4: 22

T10000T \le 10\,000

종류 5: 25

모든 입력 케이스가 주어진다.

해설