만드는 중입니다

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

하드코어 문자열 세기

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

요약
소문자 26개로 이루어진 길이 m의 문자열 중 s가 처음으로 끝에서 등장하는 경우의 수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

소문자 알파벳으로 이루어진 비어 있지 않은 문자열 ss가 주어진다. 소문자 알파벳으로 이루어진 문자열 ww가 다음 조건을 만족하면 좋은 문자열이라고 한다. ww의 모든 진부분 접두사에는 ss가 부분 문자열로 나타나지 않지만, ww 자신에는 ss가 나타난다.

길이가 mm인 좋은 문자열의 개수를 구하라. 개수가 매우 클 수 있으므로, 소수 998 244 353=223⋅119+1998\,244\,353 = 2^{23} \cdot 119 + 1로 나눈 나머지를 구한다.

입력

첫째 줄에 두 정수 nn(ss의 길이)과 mm(세어야 할 문자열의 길이)이 주어진다 (1≤n≤1051 \leq n \leq 10^5, n≤m≤109n \leq m \leq 10^9). 둘째 줄에는 소문자 알파벳 nn개로 이루어진 문자열 ss가 주어진다.

출력

길이가 mm인 좋은 문자열의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 한 줄에 출력한다. 값은 0 이상이다.

예제2

  1. 예제 1

    입력
    6 7
    aaaaaa
    
    예상 출력
    25
    
  2. 예제 2

    입력
    3 5
    aba
    
    예상 출력
    675