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

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

알파벳 스티커

면접 대비

시간 제한1초메모리 제한128 MB

요약
물음표를 보이는 글자로 채워 각 글자가 하나의 연속 구간을 이루게 하는 원래 스티커의 가짓수를 셉니다.
난이도

보통10점 중 5점

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

문제

어릴 때 알파벳 소문자가 적힌 스티커를 가지고 놀았다. 스티커에는 소문자 중 일부만 적혀 있고, 26글자가 모두 적혀 있지는 않아도 된다.

한 스티커의 글자는 한 줄로 나열되어 있고, 같은 글자는 항상 서로 붙어 있다. 그래서 스티커를 문자열로 나타낼 수 있다. aabcc, ccccab, mmaw는 올바른 스티커다. abacc, cccabc, mawm은 같은 글자가 떨어진 두 곳에 나타나므로 올바른 스티커가 아니다.

글자 몇 개가 지워진 스티커를 찾았다. 지워진 글자는 모두 같은 스티커에 아직 보이는 글자 중 하나다. 즉 지워진 글자마다 그것과 같은 글자가 스티커에 적어도 하나 남아 있다. 지워진 자리는 물음표 ?로 나타낸다. 물음표가 없거나 여러 개 있는 스티커 표현이 주어지면, 원래 스티커로 가능한 경우의 수를 세어라.

예를 들어 aa??bb의 원래 스티커는 aaaabb, aaabbb, aabbbb 중 하나다. aababb는 올바른 스티커가 아니라서 답이 될 수 없고, aaccbb는 주어진 표현에 c가 보이지 않아서 답이 될 수 없다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤1001 \le T \le 100)

각 테스트 케이스는 한 줄로 이루어지며, 길이가 1 이상 10,000 이하인 문자열이 주어진다. 문자열의 각 문자는 알파벳 소문자 (a부터 z) 또는 물음표 (?)다. 물음표는 없을 수도 있고 여러 개일 수도 있다. 각 문자열에는 물음표가 아닌 글자가 적어도 하나 있고, 원래 스티커로 가능한 경우가 적어도 하나 존재한다.

출력

각 테스트 케이스마다 원래 스티커로 가능한 경우의 수를 1,000,000,007 (109+710^9 + 7)로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    4
    aa??bb
    aaccbb
    ?a?
    a??a
    
    예상 출력
    3
    1
    1
    1