Extensive Or
시간 제한3초메모리 제한256 MB
문자열 s를 k번 이어 붙인 이진수보다 작은 수 중에서 xor이 0이 되는 n원소 부분집합 개수를 1e9+7로 나눈 나머지를 구합니다.
문제
매우 큰 수 이 압축된 형태로 주어진다. 압축 결과는 이진 문자열 와 정수 이다. 빈 문자열에서 시작해 를 번 이어 붙이면 의 이진 표현이 된다. 의 첫 글자는 항상 1이다.
이렇게 정해진 에 대해 다음을 구한다. 0 이상 이하의 서로 다른 정수 개로 이루어진 집합 중에서, 원소 전체의 XOR가 0인 집합은 몇 개인가? 답이 매우 커질 수 있으므로 로 나눈 나머지를 구한다.
XOR는 배타적 논리합이고, 두 수의 XOR는 비트 단위로 계산한다. XOR를 로 쓰면 다음과 같다.
XOR는 결합법칙이 성립하므로 이다.
입력
입력은 테스트 케이스 하나로 이루어지고 정확히 두 줄이다. 첫째 줄에 정수 과 가 공백을 사이에 두고 주어진다 (, ). 은 집합에 들어가는 서로 다른 정수의 개수이고, 는 을 만들려고 를 이어 붙이는 횟수이다. 둘째 줄에 문자열 가 주어진다. 의 길이는 1 이상 50 이하이고 각 문자는 0 또는 1이며, 첫 글자는 1이다.
출력
0 이상 이하의 서로 다른 정수 개로 이루어지고 원소 전체의 XOR가 0인 집합의 개수를 로 나눈 나머지를 한 줄에 출력한다.