Кожне відображення множини \{0,1\}^n -вимірних бінарних векторів у називається булевою функцією змінних і позначається як f(x_n,x_{n-1},...,x_1). У криптографії деякі властивості булевих функцій є особливо цікавими. Позначимо через B(n,k) множину -вимірних бінарних векторів, які містять одиниць. Ваше завдання полягає в тому, щоб для заданої булевої функції визначити кількість векторів (b_n,b_{n-1},...,b_1) з B(n,k), для яких виконується f(b_n,b_{n-1},...,b_1)=1.
Булева функція буде задана своїм (унікальним) поліномом за модулем . У цих поліномах використовуються операції додавання та множення за модулем , як показано в таблицях на Рис. 1. У поліномі функції будь-який добуток змінних x_{i1} x_{i2} ... x_{im} може бути присутнім або відсутнім. Таким чином, загальна форма полінома для змінних виглядає так:
де всі коефіцієнти a_j, j=0,1,...,N=2^n-1, є або . Якщо коефіцієнт дорівнює , ми опускаємо відповідний добуток, а якщо дорівнює , ми просто не пишемо коефіцієнт. Наприклад, поліном булевої функції диз'юнкції змінних, наведений на Рис. 2, виглядає як 0+1 \cdot x_1+1 \cdot x_2+1 \cdot x_2x_1=x_1+x_2+x_2x_1.

Ваша програма повинна бути готова обробляти більше ніж один тестовий випадок. Перша строка вхідного файлу містить лише число тестових випадків. Кожна з наступних строк описує одну функцію - спочатку числа та , розділені одним пробілом (1 \le n \le 18, 0 \le k \le n), а потім, розділені ще одним пробілом, рядок з 2^n символів та , які є коефіцієнтами відповідного полінома, впорядкованими, як у загальній формі полінома, наведеної вище.
Вихідний файл повинен містити рядків, кожен з одним числом - кількість векторів, знайдених вашою програмою.
Приклад 1