Олимпиадный тренинг

Задача . H. Тройки


Вы получили подарок на день рождения — \(n\) троек целых чисел! \(i\)-я из них равна \(\lbrace a_{i}, b_{i}, c_{i} \rbrace\). Все числа не меньше \(0\) и строго меньше чем \(2^{k}\), где \(k\) — фиксированное целое число.

Однажды вам надоело играть с этими тройками, и вы выбрали три новых целых числа \(x\), \(y\), \(z\), а затем составили \(n\) массивов. \(i\)-й массив состоит из \(a_i\), повторенного \(x\) раз, \(b_i\), повторенного \(y\) раз и \(c_i\), повторенного \(z\) раз. Таким образом, каждый массив имеет длину \((x + y + z)\).

Вы хотите выбрать ровно одно число из каждого массива так, чтобы их побитовое исключающее ИЛИ (XOR) было равно \(t\). Найдите количество способов так выбрать числа для каждого \(t\) от \(0\) до \(2^{k} - 1\) включительно по модулю \(998244353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^{5}\), \(1 \leq k \leq 17\)) — количество массивов и длина двоичной записи описанных в условии чисел.

Вторая строка содержит три целых числа \(x\), \(y\), \(z\) (\(0 \leq x,y,z \leq 10^{9}\)) — числа, которые вы выбрали.

В следующих \(n\) строках содержатся описания троек. \(i\)-я из них содержит три целых числа \(a_{i}\), \(b_{i}\) и \(c_{i}\) (\(0 \leq a_{i} , b_{i} , c_{i} \leq 2^{k} - 1\)) — целые числа, составляющие \(i\)-й массив.

Выходные данные

Выведите одну строку, содержащую \(2^{k}\) целых чисел. \(i\)-е из них должно быть равно количеству способов выбрать ровно одно число из каждого массива так, чтобы их побитовое исключающее ИЛИ (XOR) было равно \(t = i-1\) по модулю \(998244353\).

Примечание

В первом примере единственный массив равен \((1, 0, 0, 1, 1, 1)\), есть два способа получить \(0\) в результате побитового исключающего ИЛИ и четыре способа получить \(1\).

Во втором примере два массива равны \((0, 1, 1, 2)\) и \((1, 2, 2, 3)\). Всего есть шестнадцать \((4 \cdot 4)\) способов выбрать числа, \(4\) из них (\(1 \oplus 1\) и \(2 \oplus 2\) по два раза) дают \(0\), \(2\) из них (\(0 \oplus 1\) и \(2 \oplus 3\)) дают \(1\), \(4\) из них (\(0 \oplus 2\) и \(1 \oplus 3\) по два раза) дают \(2\), и наконец \(6\) из них (\(0 \oplus 3\), \(2 \oplus 1\) и четыре раза \(1 \oplus 2\)) дают \(3\).


Примеры
Входные данныеВыходные данные
1 1 1
1 2 3
1 0 1
2 4
2 2 2
1 2 1
0 1 2
1 2 3
4 2 4 6
3 4 3
1 2 3
1 3 7
0 2 5
1 0 6
3 3 2
198 198 126 126 126 126 198 198

time 1500 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя