Liars

Time limit: 1s Memory limit: 256MB Input: liars.in Output: liars.out

YOU are a LIAR!!!!

Recent Zoli a descoperit un nou cartier în orașul Târgu Mureș. În acest cartier există NN oameni numerotați de la 11 la NN, 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 NN noduri si N1N - 1 muchii). Muchiile grafului reprezintă relațiile de vecinătate între acești oameni (o muchie de la un nod aa la un nod bb semnifică faptul că omul aa este vecin cu omul bb).

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ă 22 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ă "1010"). Î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 ii din acest cartier "Câți vecini ai care sunt mincinoși?", iar fiecare om a răspuns cu o valoare rir_i. Apoi, Zoli a dedus o configurație CC unde CiC_i are valoarea 11 dacă Zoli a dedus că omul ii este sincer, respectiv 00 dacă a dedus că ii este mincinos. Configurația construită de Zoli nu se auto-contrazice: dacă tit_i este numărul de vecini vv ai omului ii pentru care CvC_v este 00, atunci dacă CiC_i este 11 atunci ri=tir_i = t_i, iar dacă CiC_i este 00 atunci ritir_i \neq t_i, pentru orice 1iN1 \leq i \leq N.

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 666013666013.

Date de intrare

Fișierul de intrare liars.in conține pe prima linie un număr natural NN, reprezentând numărul de oameni din cartier. Pe a doua linie se găsesc NN numere naturale reprezentând răspunsurile oamenilor la întrebarea lui Zoli (al ii-lea element de pe această linie este rir_i). Următoarele N1N - 1 linii conțin fiecare câte două numere naturale aa și bb, indicând faptul că omul aa și omul bb 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 NN valori binare reprezentând o configurație posibilă pentru cei NN oameni. A ii-a valoare este 00 dacă Zoli a dedus că omul cu indicele ii este mincinos, respectiv 11 dacă Zoli a dedus că omul cu indicele ii 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

  • 4N5 0004 \leq N \leq 5 \ 000;
  • 0riti0 \leq r_i \leq t_i;
  • Două configurații AA și BB se consideră distincte dacă există o poziție ii, 1iN1 \leq i \leq N, pentru care AiBiA_i \neq B_i.
  • Pentru rezolvarea primei cerințe (numărul total de configurații distincte) se acordă 60%60\% din punctaj.
  • Pentru rezolvarea celei de-a doua cerințe (reconstituirea unei soluții) se acordă 40%40\% din punctaj.
  • Se garantează că pe cel puțin 11 test, numărul total de soluții depășește modulo 666 013666 \ 013.
# Scor Restricții
1 13 N20N \leq 20
2 3 Arborele este un lanț (gradul maxim al unui nod este 22)
3 31 Gradul maxim al unui nod este 1010
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 22 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 11 este vecin cu nodurile 22 (sincer) și 33 (mincinos), deci răspunsul corect la întrebare este 11. Prin urmare, nodul 11 este sincer deoarece a răspuns cu 11.
  • Nodul 22 este vecin cu nodurile 11 (sincer), 44 (mincinos), 55 (mincinos), 66 (sincer), deci răspunsul pentru nodul 22 este 22. Prin urmare, nodul 22 este sincer deoarece a răspuns cu 22.
  • Nodul 33 este vecin doar cu nodul 22 care este sincer, deci răspunsul la întrebare este 00 (sunt 00 mincinoși vecini cu el). Deoarece a răspuns cu 11, nodul 33 e mincinos.
  • Nodul 44 este vecin cu 22. Asemănător cu nodul 33, este mincinos.
  • Nodul 55 este vecin cu nodul 22 și 77 care sunt amândoi sinceri. Deoarece răspunsul este 00 și a răspuns cu 11, nodul 55 e mincinos.
  • Nodul 66 e vecin cu 22, deci 66 e sincer pentru că a răspuns că sunt 00 mincinoși vecini.
  • Nodul 77 este vecin cu 55 care este mincinos. Răspunsul fiind 11, nodul 77 e sincer pentru că a răspuns cu 11.

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