YOU are a LIAR!!!!
Recent Zoli a descoperit un nou cartier în orașul Târgu Mureș. În acest cartier există oameni numerotați de la la , fiecare om aflându-se într-o casă pe care ne-o putem imagina ca pe un nod într-un arbore (un graf neorientat conex cu noduri si muchii). Muchiile grafului reprezintă relațiile de vecinătate între acești oameni (o muchie de la un nod la un nod semnifică faptul că omul este vecin cu omul ).
Dorind să se mute, Zoli a început să se intereseze de oamenii din acest cartier și de caracterul lor moral. El a aflat că în acest cartier există tipuri de oameni: sinceri și mincinoși. Oamenii sinceri sunt genul de oameni pe care orice i-ai întreba răspund doar cu adevărul (de exemplu dacă întrebi un olimpic la info care e sincer: "Salut boss, câte cifre există în baza 2?" o să răspundă ""). În schimb, mincinoșii sunt genul de oameni pe care orice i-ai întreba, o să răspundă doar cu o minciună (de exemplu dacă întrebi un Tamio la info care e mincinos "Salut Tamio, câți bani faci făcând cercetare?", o să răspundă "Sunt milionar boss, eu îmi cumpăr doar ciocolată Poiana săracule!").
Ca să determine cine e mincinos și cine nu, Zoli a întrebat fiecare om din acest cartier "Câți vecini ai care sunt mincinoși?", iar fiecare om a răspuns cu o valoare . Apoi, Zoli a dedus o configurație unde are valoarea dacă Zoli a dedus că omul este sincer, respectiv dacă a dedus că este mincinos. Configurația construită de Zoli nu se auto-contrazice: dacă este numărul de vecini ai omului pentru care este , atunci dacă este atunci , iar dacă este atunci , pentru orice .
Cerință
Determinați numărul total de configurații distincte pe care le poate deduce Zoli din răspunsurile date de oamenii din cartier, precum și o configurație individuală pe care o poate deduce Zoli. Deoarece numărul de configurații poate fi foarte mare, trebuie să-l afișați modulo .
Date de intrare
Fișierul de intrare liars.in
conține pe prima linie un număr natural , reprezentând numărul de oameni din cartier. Pe a doua linie se găsesc numere naturale reprezentând răspunsurile oamenilor la întrebarea lui Zoli (al -lea element de pe această linie este ). Următoarele linii conțin fiecare câte două numere naturale și , indicând faptul că omul și omul sunt vecini.
Date de ieșire
Fișierul de ieșire liars.out
va conține pe prima linie un număr natural reprezentând numărul de configurații distincte pe care le poate deduce Zoli. Pe a doua linie va conține valori binare reprezentând o configurație posibilă pentru cei oameni. A -a valoare este dacă Zoli a dedus că omul cu indicele este mincinos, respectiv dacă Zoli a dedus că omul cu indicele este sincer. Se garantează că mereu există cel puțin o configurație posibilă. Dacă există mai multe soluții posibile, se poate afișa oricare.
Restricții și precizări
- ;
- ;
- Două configurații și se consideră distincte dacă există o poziție , , pentru care .
- Pentru rezolvarea primei cerințe (numărul total de configurații distincte) se acordă din punctaj.
- Pentru rezolvarea celei de-a doua cerințe (reconstituirea unei soluții) se acordă din punctaj.
- Se garantează că pe cel puțin test, numărul total de soluții depășește modulo .
# | Scor | Restricții |
---|---|---|
1 | 13 | |
2 | 3 | Arborele este un lanț (gradul maxim al unui nod este ) |
3 | 31 | Gradul maxim al unui nod este |
4 | 53 | Fără restricții suplimentare |
Exemplu
liars.in
7
1 2 1 1 1 0 1
1 2
1 3
2 4
2 5
2 6
5 7
liars.out
2
1 1 0 0 0 1 1
Explicație
Sunt configurații în total pe care le poate deduce Zoli: cea din exemplu este una din ele, cealaltă fiind 0 1 1 0 1 1 0
.
Pentru soluția din exemplu explicația este următoarea:
- Nodul este vecin cu nodurile (sincer) și (mincinos), deci răspunsul corect la întrebare este . Prin urmare, nodul este sincer deoarece a răspuns cu .
- Nodul este vecin cu nodurile (sincer), (mincinos), (mincinos), (sincer), deci răspunsul pentru nodul este . Prin urmare, nodul este sincer deoarece a răspuns cu .
- Nodul este vecin doar cu nodul care este sincer, deci răspunsul la întrebare este (sunt mincinoși vecini cu el). Deoarece a răspuns cu , nodul e mincinos.
- Nodul este vecin cu . Asemănător cu nodul , este mincinos.
- Nodul este vecin cu nodul și care sunt amândoi sinceri. Deoarece răspunsul este și a răspuns cu , nodul e mincinos.
- Nodul e vecin cu , deci e sincer pentru că a răspuns că sunt mincinoși vecini.
- Nodul este vecin cu care este mincinos. Răspunsul fiind , nodul e sincer pentru că a răspuns cu .