만드는 중입니다

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

a^i b^j c^k 부분 수열 세기

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

요약
a, b, c로만 이루어진 문자열에서 a가 한 개 이상, 그다음 b가 한 개 이상, 그다음 c가 한 개 이상인 부분수열의 개수를 1,000,000,007로 나눈 나머지로 구한다.
난이도

보통10점 중 5점

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

문제

a, b, c로만 이루어진 문자열 SS가 주어진다. SS의 부분 수열 중에서 aibjcka^i b^j c^k 형태인 것의 개수를 구하는 프로그램을 작성하시오. 이때 i≥1i \ge 1, j≥1j \ge 1, k≥1k \ge 1을 만족해야 한다.

aibjcka^i b^j c^k는 a가 ii개, 이어서 b가 jj개, 그 다음 c가 kk개 연속해서 나오는 문자열이다. 예를 들어 a2b3c1a^2 b^3 c^1은 aabbbc이고, a3b1c6a^3 b^1 c^6은 aaabcccccc이다.

부분 수열은 SS에서 문자를 0개 이상 지우고 남은 문자를 원래 순서대로 이어 붙인 문자열이다. 고른 위치의 집합이 다르면 남은 문자열이 같아도 서로 다른 부분 수열로 센다.

입력

첫째 줄에 a, b, c로만 이루어진 문자열 SS가 주어진다. SS의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 SS의 부분 수열 중 aibjcka^i b^j c^k 형태인 것의 개수를 1,000,000,007로 나눈 나머지를 출력한다.

예제9

  1. 예제 1

    입력
    abc
    
    예상 출력
    1
    
  2. 예제 2

    입력
    abcc
    
    예상 출력
    3
    
  3. 예제 3

    입력
    abbcc
    
    예상 출력
    9
    
  4. 예제 4

    입력
    aabbcc
    
    예상 출력
    27
    
  5. 예제 5

    입력
    abbccc
    
    예상 출력
    21
    
  6. 예제 6

    입력
    abbcccabc
    
    예상 출력
    51
    
  7. 예제 7

    입력
    abcabcabcabc
    
    예상 출력
    111
    
  8. 예제 8

    입력
    cba
    
    예상 출력
    0
    
  9. 예제 9

    입력
    aaaaabbbbbccccc
    
    예상 출력
    29791