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

Задача . H. Подсчет путей


Задано корневое дерево. Определим d(x) как высоту вершины x: высота корня равна 1, высоты любой другой вершины x равна d(y) + 1, где y — предок вершины x.

У данного дерева есть следующее свойство: каждая вершина x с d(x) = i имеет ровно ai детей. Максимальная возможная глубина вершины равна n, an = 0.

Определим fk как количество неупорядоченных пар вершин в дереве таких, что количество ребер на простом пути между ними равно k.

Посчитайте fk по модулю 109 + 7 для всех 1 ≤ k ≤ 2n - 2.

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

В первой строке записано одно целое число n (2  ≤  n  ≤  5 000) — максимальная глубина вершины.

Во второй строке записаны n - 1 целых чисел a1,  a2,  ...,  an - 1 (2 ≤  ai  ≤ 109), где ai — количество детей у каждой вершины x такой, что d(x) = i. Так как an = 0, оно не задается во входных данных.

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

Выведите 2n - 2 чисел. В k-й строке выведите fk по модулю 109 + 7.

Примечание

Дерево из первого примера:


Примеры
Входные данныеВыходные данные
1 4
2 2 2
14 19 20 20 16 16
2 3
2 3
8 13 6 9

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

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