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

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

문자열의 개수

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

요약
길이가 L*K 이상 L*K+N 이하이고 주어진 패턴 S가 서로 겹치지 않게 최대 K번만 나타나는 소문자 문자열의 개수를 센다.
난이도

어려움10점 중 9점

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

문제

길이가 L인 문자열 S가 주어진다. 임의의 문자열 T에 대해 c(T)를 T 안에서 S가 서로 겹치지 않게 등장하는 최대 횟수로 정의한다. 이때 S를 이루는 문자는 T 안에서 연속으로 나타나야 한다.

예를 들어 S = "ab"이면 c("xyz") = 0, c("ababxab") = 3이다. S = "aaa"이면 c("aa") = 0, c("aaaaaa") = 2이다.

두 정수 N과 K가 주어질 때, 다음 세 조건을 모두 만족하는 문자열 X의 개수를 구하는 프로그램을 작성하시오.

  • X는 알파벳 소문자로만 이루어진다.
  • X의 길이는 L×KL \times K 이상 L×K+NL \times K + N 이하이다.
  • c(X) = K이다.

K = 0이면 길이가 0인 X도 조건을 만족한다. 빈 문자열의 c 값은 0이므로 이 문자열도 개수에 포함한다.

입력

첫째 줄에 문자열 S와 정수 N, K가 공백으로 구분되어 주어진다.

S는 알파벳 소문자로만 이루어져 있고 길이는 L이다. (1≤L≤1001 \le L \le 100, 0≤N≤10000 \le N \le 1000, 0≤K≤1090 \le K \le 10^9)

출력

첫째 줄에 조건을 만족하는 문자열 X의 개수를 1,000,000,009로 나눈 나머지를 출력한다.

힌트

S = "xy", N = 2, K = 1인 경우를 보자. 길이가 4이면서 "xy"를 한 번 이상 포함하는 문자열은 2027개인데, 그중 "xyxy"는 c 값이 2이므로 제외해야 하고 2026개가 남는다. 길이가 3인 문자열은 52개, 길이가 2인 문자열은 1개이므로 답은 2079이다.

S = "q", N = 2, K = 1인 경우에는 q를 정확히 하나만 포함하는 문자열이 답이 된다. 길이가 1인 문자열은 1개, 길이가 2인 문자열은 2×25=502 \times 25 = 50개, 길이가 3인 문자열은 3×252=18753 \times 25^2 = 1875개다.

예제4

  1. 예제 1

    입력
    xy 2 1
    
    예상 출력
    2079
    
  2. 예제 2

    입력
    q 2 1
    
    예상 출력
    1926
    
  3. 예제 3

    입력
    ababab 5 4
    
    예상 출력
    527166180
    
  4. 예제 4

    입력
    fgcdx 10 3
    
    예상 출력
    586649223