Cadouri

Time limit: 0.2s Memory limit: 64MB Input: Output:

Cerință

Cei nn copii din clasa lui Matei organizeaza o serbare de Craciun. Unii copii au fost deosebit de mult ajutati de alti copii pentru teme, asa ca doresc sa ii multumeasca oferindu-le cadouri. Mai concret, un copil ii (0i<n0 \leq i \lt n) va face una din urmatoarele doua actiuni:

  • Va veni cu mainile in buzunar, fara sa aduca niciun cadou.
  • Cum a fost deosebit de mult ajutat de un coleg, ii va oferi un cadou.

Pentru a reprezenta situatia din clasa, notam vi=jv_i = j daca copilul ii ii aduce un cadou copilului jj. Daca un copil ii nu aduce un cadou atunci vi=1v_i = -1. Evident, un copil nu isi poate face singur un cadou.

Pentru a scapa mai repede de gasitul cadourilor, copiii se vor imparti in grupuri. Toti copiii din cadrul unui grup se vor aduna impreuna si vor conveni o singura idee de cadou, urmand sa il achizitioneze fiecare si sa-l ofere mai departe destinatarilor. Copiii care nu dau cadouri nu fac parte din niciun grup.

Totusi, acestia vor sa se asigure ca niciun copil nu va primi doua sau mai multe cadouri identice. In plus, niciun copil nu si-ar dori sa primeasca cadoul pe care insusi acesta l-a oferit altui coleg. Mai exact, pentru orice copil ii (0i<n0 \leq i \lt n), cadoul oferit de acesta trebuie sa fie diferit de cadourile primite, iar cadourile primite sa fie distincte intre ele. Ar fi foarte dezamagitor sa primesti de Craciun un cadou pe care l-ai oferit chiar tu, sau de mai multe ori aceeasi cadou!

Care este numarul minim de grupuri care se pot forma, astfel incat toti copiii sa fie fericiti?

Date de intrare

Pe prima linie se da numarul nn de copii. Pe urmatorul linie se dau nn numere: v0,v1,...,vnv_0, v_1, ... , v_n_-1_1. Daca vi=1v_i = -1, atunci copilul ii nu va face niciun cadou. Astfel, copilul ii va oferi un cadou copilului viv_i.

Date de ieșire

Pe prima linie se vor afisa nn numere. Al ii-lea numar reprezinta indicele grupului celui de-al ii-lea copil. Grupurile trebuie indexate de la 00. Daca un copil nu face parte din niciun grup, valoarea corespunzatoare afisata trebuie sa fie egala cu 1-1.

Daca sunt mai multe solutii valide, se va accepta oricare dintre ele.

Restricții și precizări

  • 1n1051 \leq n \leq 10^5;
  • 1vi<n-1 \leq v_i \lt n, pentru orice 0i<n0 \leq i \lt n.
  • Pentru orice 0i<n,vii0 \leq i \lt n, v_i \ne i

Subtask-uri

# Punctaj Restricții
1 20 0i<n,vi1,i11n1000 \leq i \lt n, v_i \in {-1, i - 1} \newline 1 \leq n \leq 100
2 20 v0,v1,...,vnv_0, v_1, ... , v_n_-1_1 este o permutare a numerelor de la 00 la n1n-1
3 20 1n10001 \leq n \leq 1000
4 40 Nicio constrângere suplimentară

Exemplul 1

stdin

5
2 0 -1 0 3

stdout

1 0 -1 2 1

Exemplul 2

stdin

4
1 2 3 0

stdout

0 1 0 1

Exemplul 3

stdin

3
-1 -1 -1

stdout

-1 -1 -1

Log in or sign up to be able to send submissions!