아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

복면산 덧셈식 세기

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

요약
각 자릿수마다 서로 다른 숫자만 써서 밑 B에서 합이 N이 되는 덧셈식 개수를 셉니다.
난이도

어려움10점 중 8점

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

문제

복면산 덧셈식은 더하는 수와 합을 모두 오른쪽 끝에 맞춰 세로로 쓴 덧셈식이다. 예를 들면 다음과 같다.

124
 31
 25
---
180

여기에 더해, 각 열에 놓인 더하는 수의 숫자는 모두 서로 달라야 한다. 합은 이 조건에 들어가지 않는다. 위 식에서 첫째 열에는 숫자 1만 있고, 둘째 열에는 2와 3과 2가, 셋째 열에는 4와 1과 5가 있다. 둘째 열에 2가 두 번 나오므로 위 식은 복면산 덧셈식이 아니다. 마지막 더하는 수를 15로, 합을 170으로 바꾸면 복면산 덧셈식이 된다.

더하는 수는 항상 양수이고 앞자리에 0을 붙이지 않는다. 자릿수가 짧은 수는 자기 길이를 넘어가는 열에 아무 숫자도 놓지 않는다. 더하는 수의 순서는 상관없다. 순서만 다른 두 식은 같은 식으로 센다.

10 이외의 진법도 쓸 수 있다. BB진법의 숫자는 00 이상 B−1B-1 이하의 정수를 뜻한다. 다음은 23진법 복면산 덧셈식이다.

 I7B
 JJJ
----
1F47

여기서 "I"는 숫자 18, "B"는 11, "J"는 19, "F"는 15를 나타낸다. 10진법으로 옮기면 더하는 두 수는 18×232+7×23+11=969418 \times 23^2 + 7 \times 23 + 11 = 9694와 19×232+19×23+19=1050719 \times 23^2 + 19 \times 23 + 19 = 10507이고, 합은 1×233+15×232+4×23+7=202011 \times 23^3 + 15 \times 23^2 + 4 \times 23 + 7 = 20201이다. 10 이상인 숫자를 문자로 적은 것은 예시를 읽기 쉽게 하려는 것일 뿐이고, 그런 숫자를 어떤 기호로 적는지는 이 문제에서 상관없다.

BB진법에서 합이 NN인 복면산 덧셈식이 몇 개인지 세어라. 답이 매우 클 수 있으므로 10000000071000000007로 나눈 나머지를 출력한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 다음 TT개 줄에 각각 양의 정수 NN과 BB가 주어진다. 입력의 모든 수는 10진법으로 적혀 있다.

제한

  • 1≤T≤201 \le T \le 20
  • 1≤N≤10181 \le N \le 10^{18}
  • 2≤B≤702 \le B \le 70

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 BB진법에서 합이 주어진 NN인 복면산 덧셈식의 개수를 10000000071000000007로 나눈 나머지이다. y는 10진법으로 출력한다.

힌트

10진법에서 합이 6인 복면산 덧셈식은 네 개다. 6=66 = 6, 1+5=61 + 5 = 6, 2+4=62 + 4 = 6, 1+2+3=61 + 2 + 3 = 6이다.

4진법에서 합이 8=2048 = 20_4인 식도 네 개다.

20
--
20
11
 3
--
20
13
 1
--
20
10
 3
 1
--
20

예제1

  1. 예제 1

    입력
    2
    6 10
    8 4
    
    예상 출력
    Case #1: 4
    Case #2: 4