S의 부분 수열 중 a^i b^j c^i d^j꼴 블록 하나 이상을 이어 붙인 경우의 수를 1000000007로 나눈 나머지를 구합니다.
어려움8동적 계획법조합론아직 제출이 없습니다시간 제한5초메모리 제한512 MB알보시드 종의 DNA는 a, b, c, d 네 가지 염기로 이루어진다. 개체마다 염기 배열은 다를 수 있지만, 알보시드의 DNA 서열은 항상 다음 규칙을 모두 만족한다.
a, b, c, d가 각각 하나 이상 들어 있다.a는 모든 b보다 앞에 오고, 모든 b는 모든 c보다 앞에 오며, 모든 c는 모든 d보다 앞에 온다.a의 개수와 c의 개수가 같다.b의 개수와 d의 개수가 같다.예를 들어 abcd와 aabbbccddd는 올바른 알보시드 DNA 서열이고, acbd, abc, abbccd는 아니다.
알보시드-n은 알보시드에서 진화한 종이다. 알보시드-n의 DNA 서열은 올바른 알보시드 DNA 서열을 하나 이상 이어 붙인 것이다. 예를 들어 abcd와 aaabcccdaabbbccdddabcd는 올바른 알보시드-n DNA 서열이다. 올바른 알보시드-n DNA 서열이라고 해서 올바른 알보시드 DNA 서열인 것은 아니다.
탐사에서 a, b, c, d로만 이루어진 서열 S를 가져왔다. S의 부분 수열 중 올바른 알보시드-n DNA 서열이 몇 개인지 세어라. 부분 수열은 순서를 그대로 두고 문자를 0개 이상 지워서 얻는 문자열이다. 고른 위치가 다르면 결과 문자열이 같아도 서로 다른 부분 수열로 센다. 답이 매우 클 수 있으니 109+7으로 나눈 나머지를 구한다.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 T개 줄에 문자열 S가 한 줄에 하나씩 주어진다. S는 a, b, c, d로만 이루어져 있다.
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 그 테스트 케이스의 답이다.