소 유전체
시간 제한1초메모리 제한512 MB
편집 과정(같은 글자 사이에서 나누고, 각 조각을 뒤집어 이어 붙이기)으로 만들어질 수 있는 원래 유전체의 개수를 10^9+7로 나눈 나머지로 구합니다.
문제
파머 존은 자신의 소들의 유전체를 해독했고, 이제 유전체 편집으로 넘어가려고 한다. 유전체는 A, C, G, T로 이루어진 문자열이다. 파머 존이 고려하는 유전체의 최대 길이는 이다.
파머 존은 유전체 하나에서 시작해 다음 단계로 편집한다.
- 연속된 두 문자가 같을 때마다 그 사이에서 유전체를 나눈다.
- 나눠진 각 부분 문자열을 뒤집는다.
- 뒤집은 부분 문자열을 원래 순서대로 이어 붙인다.
예를 들어 파머 존이 AGGCTTT에서 시작했다면 다음과 같이 진행된다.
- 연속된 G와 T 사이에서 나눠 AG | GCT | T | T를 얻는다.
- 각 부분을 뒤집어 GA | TCG | T | T를 얻는다.
- 부분들을 이어 붙여 GATCGTT를 얻는다.
편집이 끝난 뒤 파머 존의 컴퓨터가 고장 나서 처음 시작한 유전체를 잃어버렸다. 편집된 유전체의 일부는 손상되어 ?로 바뀌었다. 편집된 유전체가 주어졌을 때, 원래 유전체가 될 수 있는 경우의 수를 로 나눈 나머지를 구하라.
입력
A, G, C, T, ? 중 하나로 이루어진 비어 있지 않은 문자열이 한 줄로 주어진다.
출력
원래 유전체가 될 수 있는 경우의 수를 로 나눈 나머지를 출력한다.