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

Задача . E. Ребенок и двоичное дерево


Наш ребенок обожает информатику, особенно двоичные деревья.

Рассмотрим последовательность из n различных целых чисел: c1, c2, ..., cn. Ребенок называет двоичное корневое дерево со взвешенными вершинами хорошим тогда и только тогда, когда для каждой вершины v, вес v — это элемент множества {c1, c2, ..., cn}. Также наш ребенок считает, что вес дерева со взвешенными вершинами равняется сумме весов всех вершин.

Задано число m, сможете ли вы для всех s (1 ≤ s ≤ m) посчитать количество хороших двоичных корневых деревьев со взвешенными вершинами с весом s? Для более глубокого понимания того, какие деревья считаются различными, пожалуйста, посмотрите примеры тестовых данных.

Выведите ответ по модулю 998244353 (7 × 17 × 223 + 1, простое число).

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

В первой строке записано два целых числа n, m (1 ≤ n ≤ 105; 1 ≤ m ≤ 105). Во второй строке записано n попарно различных целых чисел через пробел c1, c2, ..., cn (1 ≤ ci ≤ 105).

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

Выведите m строк, каждая строка должна содержать единственное целое число. В i-й строке должно быть записано количество хороших двоичных корневых деревьев со взвешенными вершинами с весом i. Выведите ответ по модулю 998244353 (7 × 17 × 223 + 1, простое число).

Примечание

В первом примере существует 9 хороших двоичных корневых деревьев со взвешенными вершинами, чей вес равняется ровно 3:


Примеры
Входные данныеВыходные данные
1 2 3
1 2
1
3
9
2 3 10
9 4 3
0
0
1
1
0
2
4
2
6
15
3 5 10
13 10 6 4 15
0
0
0
1
0
1
0
2
0
5

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

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