K-균등 문자열
시간 제한1초메모리 제한256 MB
길이 N인 0과 1 문자열 중, 주어진 M개 구간 각각에서 길이 K인 모든 연속 부분 문자열이 같은 개수의 1을 갖는 문자열의 수를 1,000,000,007로 나눈 나머지로 구한다.
문제
0과 1로 이루어진 문자열에서 길이가 인 연속 부분문자열을 모두 살펴봤을 때 그 안에 들어 있는 1의 개수가 전부 같으면, 이 문자열을 -균등하다고 하자.
예를 들어 문자열 100110은 4-균등하다. 길이가 4인 연속 부분문자열은 1001, 0011, 0110 세 개인데 셋 다 1을 두 개씩 담고 있기 때문이다.
온조는 0과 1로 이루어진 길이 의 문자열을 만들려고 한다. 온조에게는 좋아하는 구간 개와 좋아하는 수 개가 있다. 번째 구간은 번째 문자부터 번째 문자까지의 부분문자열을 뜻하고, 번째 수는 이다. 온조는 번째 구간에 해당하는 부분문자열이 -균등하기를 원한다. 는 번째 구간의 길이보다 크지 않다.
온조가 만들 수 있는 문자열의 개수를 구하여라. 수가 커질 수 있으니 1,000,000,007로 나눈 나머지를 출력한다.
입력
첫째 줄에 과 이 주어진다. (, )
이어지는 개 줄 중 번째 줄에 , , 가 주어진다. (, )
출력
첫째 줄에 온조가 만들 수 있는 문자열의 개수를 1,000,000,007로 나눈 나머지를 출력한다.
힌트
첫 번째 예제에서 만들 수 있는 문자열은 00000, 00001, 01010, 01011, 10100, 10101, 11110, 11111의 여덟 가지이다.
두 번째 예제에는 온조가 좋아하는 구간도 수도 없으므로 길이 의 문자열을 아무렇게나 만들어도 된다. 즉 가지를 만들 수 있다.