편집 거리 세기

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

요약
주어진 문자열 s와 레벤슈타인 거리가 정확히 d인 'A'부터 'Z'까지의 서로 다른 문자열 개수를 998244353으로 나눈 나머지를 구한다.
난이도

어려움10점 중 9점

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

문제

Charles가 Ada에게 불평한다. "이 Keats라는 작자! 원고에 맞춤법 오류가 이렇게 많다니! 이걸 다 어떻게 고치지?"

Ada가 답한다. "Engine에 도움이 될 만한 루틴이 있어요. 어떤 단어가 주어지면 작은 오류들을 고려해서 그 단어에 가까운 단어를 모두 찾아 주니, 영어 사전에서 찾아볼 수 있어요. 여기, 제 차 좀 들고 이걸 보세요."

Ada가 카드를 빠르게 구멍 뚫고 실에 꿰더니, Engine을 가동한다. 보일러에서 증기가 뿜어져 나오고, Engine이 조용히 웅웅거리다 점점 빨라져 방을 흔들더니, 마침내 과부하가 걸린 캠이 뻑 하고 멈추면서 기계가 갑자기 서 버린다.

"흠," Ada가 중얼거린다. "난 그거 해결한 줄 알았는데."

두 문자열의 Levenshtein 거리는 한 문자열을 다른 문자열로 바꾸는 데 필요한 가장 적은 수의 한 글자 연산이다. 연산은 다음과 같다.

  • 문자열 어디에든 글자 하나를 추가한다.
  • 문자열 어디에서든 글자 하나를 제거한다.
  • 문자열의 어떤 글자든 다른 글자로 바꾼다.

알파벳 ‘A’-‘Z’로 이루어진 입력 문자열과 Levenshtein 거리가 주어진다. 입력 문자열과의 Levenshtein 거리가 정확히 그 값인, 알파벳 ‘A’-‘Z’로 이루어진 서로 다른 문자열의 개수를 출력하라. 이 수는 클 수 있으므로 소수 998,244,353으로 나눈 나머지를 출력하라.

입력

입력의 한 줄에는 문자열 s (1 ≤ |s| ≤ 10, s는 대문자만 포함)와 공백 하나, 그다음 정수 d (0 ≤ d ≤ 10)가 주어진다. s는 문제의 문자열이고 d는 관심 있는 Levenshtein 거리이다.

출력

입력 문자열 s와의 Levenshtein 거리가 d인, 알파벳 ‘A’-‘Z’로 이루어진 서로 다른 문자열의 개수를 998,244,353으로 나눈 나머지를 한 정수로 출력하라. 빈 문자열도 유효한 결과 문자열로 간주한다.

예제2

  1. 예제 1

    입력
    ICPC 1
    
    예상 출력
    230
    
  2. 예제 2

    입력
    PROGRAMMER 10
    
    예상 출력
    110123966