409457: GYM103566 E Стикеры
Description
Организаторы олимпиады «Технологичные Когнитивы» обещали стикеры тем, кто позовет друзей участвовать в соревновании. Каждый участник при регистрации мог указать ФИО друга, который уговорил его принять участие в олимпиаде (а мог и не указать никого).
Если двое или более друзей, указавших вас как «пригласившего», зарегистрировались строго позже вас и решили хотя бы одну задачу, вы получаете заветные стикеры.
Пока жюри подводит итоги самой олимпиады, вопрос $$$\it{\text{«Ну что там по стикерам?»}}$$$ звучит из каждого утюга, поэтому помогите жюри и найдите список всех участников, получивших набор стикеров.
Входные данныеВ первой строке вводится число $$$N$$$ $$$(1 \le N \le 3 \cdot 10^5)$$$ — число участников. Для удобства участники пронумерованы целыми числами от 1 до N.
Во второй строке записаны $$$N$$$ чисел $$$T_i$$$ $$$(1 \le T_i \le 10^9)$$$ — время регистрации $$$i$$$-го участника.
В третьей строке записаны $$$N$$$ чисел $$$P_i$$$ $$$(0 \le P_i \le 12)$$$ — количество задач, решенных участником $$$i$$$.
В четвертой строке записаны $$$N$$$ чисел $$$F_i$$$ $$$(0 \le F_i \le N)$$$ — номер друга, которого $$$i$$$-й участник отметил как «пригласившего». Если $$$F_i = 0$$$, то $$$i$$$-й участник никого не указал в таком статусе.
Выходные данныеВ первой строке выведите одно целое число $$$K$$$ $$$(0 \le K \le N)$$$ — количество участников, которые должны получить стикеры.
Во второй строке через пробел выведите $$$K$$$ целых чисел $$$S_i$$$ $$$(1 \le S_1 \le S_2 \le \ldots \le S_K \le N)$$$ — номера получивших стикеров участников в возрастающем порядке.
Если $$$K = 0$$$, то на второй строке не надо выводить ничего.
ПримерыВходные данные9 2 3 1 4 5 9 8 7 6 12 11 10 9 8 7 6 5 4 1 1 1 2 2 9 9 9 9Выходные данные
2 2 9Входные данные
5 1 2 10 11 5 6 7 0 9 10 5 5 5 5 0Выходные данные
0Примечание
Рассмотрим детально первый тестовый пример.
- Первый участник указал себя в качестве друга, соответственно он зарегистрировался НЕ позже себя — не учитывается при распределении.
- Второй участник указал первого как друга, а также зарегистрировался после участника $$$1$$$, значит, один приглашенный у первого есть.
- Третий участник указал первого как друга, но зарегистрировался раньше, чем он, поэтому по правилам участник $$$3$$$ так же не учитывается при распределении.
- Четвертый и пятый участники указали второго как друга и зарегистрировались после него. Засчитываем участнику $$$2$$$ двух приглашенных друзей.
- Шестой, седьмой и восьмой участники указали девятого участника пригласившим и зарегистрировались после него. Участнику $$$9$$$ засчитали трех приглашенных друзей.
- Сам девятый участник указал себя в качестве друга, соответственно он зарегистрировался НЕ позже себя — не учитывается при распределении.
Итого, первому участнику «засчитали» одного друга, второму — двух, девятому — трёх. Все засчитанные участники решили хотя бы одну задачу, поэтому дают право участникам $$$2$$$ и $$$9$$$ получить стикеры.
Рассмотрим второй тестовый пример.
- Первый и второй участники зарегистрировались до пятого, значит ему «в зачет» они не идут.
- Третий участник зарегистрировался позже пятого, но не решил ни одной задачи, поэтому его голос учитываться не будет.
- Лишь четвертый участник указал пятого, зарегистрировался позже него и решил хотя бы одну задачу. Поэтому только четвертый участник и будет засчитан пятому при распределинии стикеров.
- Сам пятый участник не указал вообще никого в анкете — вероятно он узнал об олимпиаде не от своего друга.