만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

긴 케이크 나눠주기

면접 대비

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

요약
길이가 n인 케이크를 k-1번 잘라 k조각으로 나눌 때, 모든 조각의 토핑 수가 같아지는 자르는 방법의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 5점

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

문제

Albert는 길이가 nn인 긴 케이크를 구웠다. 이 케이크는 nn등분할 수 있도록 총 nn개의 칸으로 미리 나뉘어 있고, 일부 칸에는 과일 토핑이 올라가 있다.

예를 들어 아래 그림은 n=8n = 8인 케이크이고, 00은 토핑이 없는 칸, 11은 과일 토핑이 있는 칸을 나타낸다. 이를 정수 배열로 나타내면 A=[0,1,1,0,0,1,1,0]A = [0, 1, 1, 0, 0, 1, 1, 0]이다. A[i]A[i]는 ii번째 칸에 토핑이 있으면 11, 없으면 00이다.

Albert는 이 케이크를 정확히 k−1k-1번 잘라 kk개의 조각으로 나누려고 한다. 이때 다음 조건을 만족해야 한다.

  • 조건 1: 각 케이크 조각에 포함된 토핑이 올라간 칸의 개수가 모두 같아야 한다.
  • 조건 2: 버려지는 칸이나 조각이 생겨서는 안 된다.

예를 들어 k=2k = 2인 경우 버려지는 칸이나 조각 없이 위 케이크를 자를 수 있는 방법은 총 77가지이다. 그중 조건 1을 만족하는 방법은 아래 세 가지다. 각 케이크 조각에는 토핑이 올라간 칸이 두 개씩 있다.

다른 예로, 아래 그림은 n=5n = 5, A=[0,1,0,1,0]A = [0, 1, 0, 1, 0], k=2k = 2인 경우 위 조건을 만족하면서 케이크를 자를 수 있는 두 가지 방법을 나타낸다.

입력으로 nn, kk, 토핑의 유무를 나타내는 배열 AA가 주어졌을 때, 조건을 만족하며 케이크를 자를 수 있는 방법의 수를 구하라. 답이 매우 클 수 있으므로 109+710^9+7로 나눈 나머지를 출력한다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다.

각 테스트 케이스는 두 줄로 주어진다. 첫 줄에 nn과 kk가 공백으로 구분되어 주어진다. 둘째 줄에는 배열 AA의 값이 공백 없이 길이 nn인 문자열로 주어진다.

출력

각 테스트 케이스의 정답을 한 줄에 하나씩 출력한다.

제한

  • 1≤T≤101 \le T \le 10
  • 1≤k≤n≤1 000 0001 \le k \le n \le 1\,000\,000

예제1

  1. 예제 1

    입력
    9
    1 1
    1
    5 1
    01010
    5 2
    01010
    5 3
    01010
    8 2
    01100110
    14 2
    00100100100100
    13 3
    0111010100100
    61 21
    1001001001001001001001001001001001001001001001001001001001001
    3 2
    000
    
    예상 출력
    1
    1
    2
    0
    3
    3
    2
    486784380
    2