향유회 문자열

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

요약
각 '?'를 H 또는 Y로 바꿔, 빈 문자열·HY 감싸기·이어붙이기 규칙으로 만들어지는 향유회 문자열이 되는 경우의 수를 센다.
난이도

어려움10점 중 8점

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

문제

두 문자열 AA, BB에 대해 A+BA+B를 AA와 BB를 이어 붙인 문자열이라고 하자. 이때 다음과 같은 규칙으로 만들 수 있는 문자열을 향유회 문자열이라고 한다.

  • 빈 문자열은 향유회 문자열이다.
  • AA, BB가 향유회 문자열이라면, H+,A,++\\,A\\,+Y+,B,++\\,B\\,+H도 향유회 문자열이다.
  • AA, BB가 향유회 문자열이라면, A+BA+B도 향유회 문자열이다.

H, Y, ?로 이뤄진 문자열 SS이 주어진다. SS의 ?를 각각 H또는 Y로 바꿔 만들 수 있는 향유회 문자열의 개수를 109+710^9+7로 나눈 나머지를 구하여라.

입력

첫째 줄에 테스트 케이스의 개수를 나타내는 정수 TT가 주어진다. (1≤T≤1 000)(1 \leq T \leq 1\ 000)

각 테스트 케이스의 첫째 줄에 문자열의 길이를 나타내는 정수 NN이 주어진다. (1≤N≤5 000)(1 \leq N \leq 5\ 000)

각 테스트 케이스의 둘째 줄에 H, Y, ?로 이뤄진 문자열 SS가 주어진다. (∣S∣=N)(|S|=N)

모든 테스트 케이스에서 NN의 합은 5 0005\ 000 이하이다.

출력

각 테스트 케이스마다 정답을 출력한다.

예제1

  1. 예제 1

    입력
    3
    3
    H??
    2
    ??
    6
    ?YH???
    
    예상 출력
    1
    0
    2