만드는 중입니다

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

Champernowne 부분 문자열

시간 제한10초메모리 제한2048 MB

요약
물음표를 0부터 9까지 숫자로 채워, 챔퍼나운 문자열에서 그 문자열이 처음 나타나는 가장 작은 위치를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열, 수학, 구현
정답자
아직 제출이 없습니다

문제

Champernowne 문자열은 양의 정수를 순서대로 10진법 표기로 이어 붙여 만든 무한 문자열이다. 시작 부분은 1234567891011121314...이다. 임의의 유한한 숫자열은 이 문자열의 부분 문자열로 적어도 한 번 나타남이 증명되어 있다.

숫자와 물음표(?)로 이루어진 문자열이 주어진다. 각 물음표를 0부터 9까지의 숫자 하나로 바꿨을 때, 그 문자열이 Champernowne 문자열의 부분 문자열로 나타나는 가장 작은 인덱스를 구하라. 각 물음표는 서로 다른 숫자로 바꿀 수 있다. 인덱스는 클 수 있으므로 998,244,353998\\,244\\,353으로 나눈 나머지를 출력한다.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤10)(1 \leq t \leq 10)가 주어진다. 이어지는 tt개의 줄에는 각각 숫자 0부터 9까지와 물음표로 이루어진 문자열 ss (1≤∣s∣≤25)(1 \leq |s| \leq 25)가 주어진다.

출력

각 테스트 케이스마다 가장 작은 인덱스를 998,244,353998\\,244\\,353으로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    9
    0
    ???1
    121
    1?1?1
    ??5?54?50?5?505?65?5
    000000000000
    ?2222222
    ?3????????9??8???????1??0
    9?9??0????????????2
    
    예상 출력
    11
    7
    14
    10
    314159
    796889014
    7777
    8058869
    38886