RAU-Gigel și Vlad sunt prieteni buni și le place tot timpul să se provoace unul pe altul. De data aceasta, RAU-Gigel a inventat o problemă interesantă de matematică.
Acesta are un arbore secret cu noduri (numerotate de la la ), în care fiecare nod are asociată o valoare (pe lângă numărul său de ordine din arbore), care este un număr natural și ii spune lui Vlad informații despre unele drumuri din acest arbore. O informație are forma , , și reprezintă faptul că lanțul din arbore de la nodul la nodul are cel mai mare divizor comun al valorilor asociate nodurilor acestuia egal cu , unde este un număr natural nenul.
Cerință
Vlad știe că RAU-Gigel minte câteodată și s-ar putea ca unele dintre restricțiile date să fie eronate, astfel că vrea să afle întâi folosind informațiile ce le are la îndemână dacă ar putea exista un arbore care să respecte toate restricțiile date de prietenul său.
Pentru că știe ce programator iscusit ești, Vlad ți-ar fi foarte recunoscător daca l-ai putea ajuta cu această problemă prin a scrie un program care să o rezolve cât mai eficient.
Date de intrare
Fișierul de intrare gcd_tree.in
conține pe prima linie numărul , care reprezintă numărul de scenarii de test care trebuie rezolvate.
Pentru fiecare test, prima linie conține 2 numere și , reprezentând lungimea șirului secret și numărul de restricții pe care acesta trebuie să le respecte.
A doua linie conține numere naturale, al -lea număr reprezentând părintele nodului din arbore (se consideră că arbore are nodurile indexate de la și rădăcina în nodul ).
Fiecare dintre următoarele linii din test conține câte 3 numere , , , capetele lanțului din arbore pe care se aplică restricția, respectiv valoarea acestei restricții.
Date de ieșire
Programul trebuie să afișeze în fișierul de ieșire gcd_tree.out
, pe o singură linie, fără spații, un șir de lungime format din valorile sau , unde elementul de pe poziția este dacă scenariul de test cu numărul din input admite un arbore posibil care să satisfacă toate restricțiile sau în caz contrar.
Restricții și precizări
- Se notează cu suma valorilor din toate scenariile de test dintr-un fișier de intrare și cu suma valorilor din toate scenariile de test dintr-un fișier de intrare.
- Pentru teste în valoare de 13 puncte, arborele este un lanț simplu de forma ; ; și .
- Pentru alte teste în valoare de 19 puncte, arborele este un lanț simplu de forma ; ; și .
- Pentru alte teste în valoare de 17 puncte, arborele este un lanț simplu de forma și .
- Pentru alte teste în valoare de 24 puncte, arborele este un lanț simplu de forma .
- Pentru alte teste în valoare de 8 puncte, ; și .
- Pentru alte teste în valoare de 6 puncte, ; și .
- Pentru alte teste în valoare de 9 puncte, .
- Pentru restul testelor nu există restricții suplimentare, adică se păstrează doar condițiile inițiale.
Exemplu
gcd_tree.in
2
4 2
3 1 3
1 4 11
2 4 12
3 2
1 2
1 3 4
3 2 3
gcd_tree.out
10
Explicație
Pentru primul scenariu de test din exemplu, arborele secret ar putea avea valorile , , , asociate nodurilor sale (scrise în ordine, de la nodul cu numărul la nodul cu numărul ).
Pentru al doilea scenariu de test se poate demonstra ușor matematic că nu există soluție.