eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Случайное дерево

Случайное дерево

Рассмотрим следующий процесс построения дерева T.

Изначально дерево состоит из одной вершины, которая имеет номер 1.

Дальше в дерево добавляются вершины с номерами 2 ... n.

На i-м шаге в дерево добавляется вершина с номером i + 1, также в дерево добавляется ребро из нее в некоторую уже добавленную вершину p (1pi), которая выбирается среди них случайно равновероятно.

Пусть V - множество уже добавленных в T вершин.

Тогда пусть f(A) - количество вершин T, что они лежат или в A, или на пути между какими-либо двумя вершинами из A (возможно, и там, и там).

Ваша задача после добавления каждой вершины вывести сумму f(A) по всем множествам A, которые являются подмножествами множества уже добавленных в T вершин (Σ f(A) по всем AV). Так как ответы могут быть очень большим, выводите лишь остатки от деления ответа на 998244353.

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

Первая строка содержит одно число n (2n200000) - количество вершин в дереве после последнего шага.

В следующей строке расположено n - 1 целое число p1, p2, ..., pn (1pii), обозначающих добавления в граф вершины i + 1 и ребра между pi и i + 1 соответственно. Гарантируется, что pi выбрано случайно равновероятно среди чисел от 1 до i.

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

Выведите n - 1 целое число, остатки от деления (Σ f(A) по всем AV) на 998244353 после добавления каждой вершины.

prb11054.gif

Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
5
1 1 1 1
Выходные данные #1
4 13 36 91 
Входные данные #2
7
1 2 3 4 5 6
Выходные данные #2
4 13 38 103 264 649 
Источник 2018 Цикл Интернет-олимпиад для школьников, вторая командная олимпиада сезона, усложненная номинация, 10 ноября, Задача I