이진 다항식
시간 제한1초메모리 제한128 MB
n개 변수를 갖는 불리언 함수의 다항식 계수가 주어질 때, 1의 개수가 정확히 k개인 입력 벡터 중 함수값이 1이 되는 벡터의 개수를 구합니다.
문제
차원 이진 벡터의 집합 에서 로 가는 각 함수 를 변수 불 함수(Boolean function)라 하고 로 나타낸다. 암호학에서는 불 함수의 몇 가지 성질이 중요하다. 를 정확히 개의 을 가지는 차원 이진 벡터들의 집합이라 하자. 주어진 불 함수 에 대해, 에 속하면서 을 만족하는 벡터 의 개수를 구하는 것이 문제이다.
불 함수는 그 (유일한) 2를 법으로 하는 다항식으로 주어진다. 이 다항식에서는 Fig. 1의 표에 정의된 대로 를 법으로 하는 덧셈과 곱셈을 사용한다. 함수의 다항식에서 개의 변수의 곱 은 나타날 수도 있고 나타나지 않을 수도 있다. 따라서 변수 다항식의 일반형은 다음과 같다.
여기서 모든 계수 ()는 또는 이다. 계수가 이면 해당 곱을 생략하고, 이면 계수 자체를 생략한다. 예를 들어 Fig. 2에 주어진 "두 변수의 논리합(disjunction)" 불 함수의 다항식은 이다.

그림 1

그림 2
입력
프로그램은 여러 개의 테스트 케이스를 처리할 수 있어야 한다. 입력의 첫째 줄에는 테스트 케이스의 개수 가 주어진다. 다음 개의 줄에는 각각 하나의 함수가 주어진다. 먼저 공백 하나로 구분된 두 수 과 (, )가 주어지고, 다시 공백 하나로 구분되어 위의 일반형 순서대로 나열된 다항식 계수인 개의 과 로 이루어진 문자열이 주어진다.
출력
개의 줄을 출력하며, 각 줄에는 해당 함수에 대해 찾은 벡터의 개수를 하나의 수로 출력한다.