만드는 중입니다

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

사전순 정렬이 일치하는 부분집합

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

요약
A부터 B까지의 정수 중에서 값 순서와 십진 표기의 사전식 순서가 같은 공집합이 아닌 부분집합의 개수를 P로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

자연수로 이루어진 집합을 생각한다. 어떤 집합은 원소를 크기순으로 정렬한 결과와 십진법 표기를 사전순으로 정렬한 결과가 서로 같다. {2, 27, 3125, 9000}이 그런 집합이다. {2, 27, 243}은 그렇지 않다. 사전순으로 정렬하면 {2, 243, 27}이 되기 때문이다.

AA 이상 BB 이하인 정수를 모두 모은 집합에서 위 성질을 만족하는 부분집합이 몇 개인지 세는 프로그램을 작성한다. 공집합은 세지 않는다. 개수가 매우 커질 수 있으므로 입력으로 주어진 PP로 나눈 나머지를 출력한다.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 한 줄에 세 정수 AA, BB, PP가 공백으로 구분되어 주어진다. 1≤A≤1091 \le A \le 10^9, 0≤B−A<1050 \le B - A < 10^5, 1≤P≤1091 \le P \le 10^9이다.

입력의 끝은 0 세 개만 적힌 줄로 나타낸다. 이 줄은 처리하지 않는다.

출력

각 데이터 집합마다 조건을 만족하는 부분집합의 개수를 PP로 나눈 나머지를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    1 10 1000
    1 100000 1000000000
    999999999 1000099998 1000000000
    0 0 0
    
    예상 출력
    513
    899507743
    941554688
    
  2. 예제 2

    입력
    5 5 1000
    0 0 0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 2 1000000000
    1 3 1000000000
    9 11 1000000000
    0 0 0
    
    예상 출력
    3
    7
    4