균형 이진 문자열
시간 제한3초메모리 제한512 MB
원형 이진 문자열에서 모든 '?'를 0 또는 1로 바꿀 때, 같은 길이의 임의의 두 원형 부분 문자열에 포함된 1의 개수가 많아야 1만큼 차이 나도록 만드는 경우의 수를 10^9+7로 나눈 나머지로 구한다.
문제
Chiaki는 '0', '1', '?'로 이루어진 길이 의 문자열 를 가지고 있다.
의 원형 부분 문자열 은 다음과 같은 문자열이다.
길이 의 이진 문자열 가 균형이라는 것은, 임의의 두 원형 부분 문자열 과 ()에 대해 과 에 들어 있는 '1'의 개수가 많아야 1만큼 차이 나는 것을 말한다. 예를 들어 과 은 균형이지만, 과 은 균형이 아니다.
Chiaki는 자신의 문자열에서 모든 '?'를 '0' 또는 '1'로 바꾸어 문자열을 균형으로 만드는 방법의 수를 알고 싶어 한다. 이 수는 매우 클 수 있으므로 로 나눈 나머지를 계산하면 된다.
입력
여러 개의 테스트 케이스가 주어진다. 입력의 첫 줄에는 테스트 케이스의 수를 나타내는 정수 가 주어진다. 각 테스트 케이스는 다음과 같다.
첫 줄에는 '0', '1', '?'로 이루어진 비어 있지 않은 문자열 가 주어진다. ()
모든 테스트 케이스에서 의 합은 를 넘지 않는다.
출력
각 테스트 케이스마다 방법의 수를 나타내는 정수를 한 줄에 출력한다.