Tri


Submit solution

Points: 75 (partial)
Time limit: 1.0s
Memory limit: 500M

Problem type
Allowed languages
Assembly, Awk, C, C++, Java, Perl, Python

Zadan je usmjereni graf u kojemu iz svakog vrha izlazi točno jedan brid u neki drugi vrh.

Koliki je najmanji broj vrhova koje iz toga grafa treba obrisati tako da u grafu ne ostane nijedan put duljine dva; drugim riječima, tako da ne postoje neka tri (ne nužno sva različita) vrha a, b, c s bridovima a → b i b → c?

Dodatno, na koliko načina možemo obrisati taj najmanji broj vrhova da bismo ispunili navedeni uvjet?

Ulazni podatci

U prvom je retku prirodan broj n (3 ≤ n ≤ 100 000), broj vrhova grafa. Vrhovi su označeni brojevima od 1 do n.

U i-tom od idućih n redaka prirodan je broj j (i /= j) koji predstavlja brid i → j.

Izlazni podatci

U prvi redak ispišite traženi najmanji broj vrhova koji treba obrisati.

U drugi redak ispišite traženi broj načina, točnije njegov ostatak pri dijeljenju s 1 000 000 007.

Bodovanje

Prvi redak ispisa nosi 3/5, a drugi 2/5 vrijednosti testnog primjera.

U testnim primjerima ukupno vrijednima 20 bodova vrijedi n ≤ 20.

U testnim primjerima ukupno vrijednima 25 bodova, svaki vrh j imat će točno jedan ulazni brid i → j.

Probni primjeri

ulaz
4
3
3
4
3
izlaz
1
2
ulaz
5
4
5
4
2
1
izlaz
2
5
ulaz
6
2
1
2
6
4
5
izlaz
2
6
Pojašnjenje prvog probnog primjera:

Možemo obrisati vrh 3. Alternativno, možemo obrisati vrh 4.

Pojašnjenje drugog probnog primjera:

Možemo obrisati sljedeće parove vrhova: (1, 2), (1, 4), (2, 4), (2, 5), (4, 5).

Pojašnjenje trećeg probnog primjera:

Možemo obrisati sljedeće parove vrhova: (1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6).


Comments

There are no comments at the moment.