Într-un laborator secret, cercetătorii au construit o versiune experimentală a unui model GPT. Modelul este organizat sub forma unui arbore de module neuronale, fiecare nod al arborelui reprezentând un modul. Considerăm modulul neuronal ca fiind rădăcina arborelui.
Fiecărui modul îi este asociat un token, adică o literă mică din alfabetul englez.
Când un mesaj este transmis între două module și , acesta urmează unicul drum simplu dintre nodurile respective. Pe parcurs, fiecare modul adaugă propriul token la fluxul de date.
Pentru două noduri și , notăm cu șirul obținut prin concatenarea token-urilor modulelor întâlnite pe drum, în ordinea parcurgerii.
Se dau query-uri independente. Fiecare query este de forma .
Se consideră un șir fix , comun tuturor query-urilor, reprezentând „semnătura GPT perfectă”. Notăm cu lungimea șirului .
Cerință
Pentru fiecare query, determinați de câte ori apare șirul ca subșir în șirul .
Un subșir al unui șir se obține prin eliminarea a zero sau mai multe caractere, păstrând ordinea relativă a caracterelor rămase.
Rezultatul fiecărui query se va afișa modulo .
Date de intrare
Fișierul de intrare gpt.in conține:
- Pe prima linie, un număr întreg .
- Pe următoarele linii, câte două numere întregi și , indicând existența unei muchii între nodurile și .
- Pe următoarea linie, caractere separate prin câte un spațiu: , reprezentând token-urile asociate fiecărui modul.
- Pe următoarea linie, șirul .
- Pe următoarea linie, un număr întreg — numărul total de query-uri.
- Pe următoarea linie, două valori întregi și (folosite pentru generarea query-urilor).
- Pe ultima linie, două numere întregi și , reprezentând primul query.
Query-urile rămase se generează automat folosind formula:
unde este operatorul ^ din C++ și pentru primul query generat, pentru al doilea etc. Se recomandă folosirea unui tip de date de 64 de biți pentru aceste calcule.
Date de ieșire
Fișierul de ieșire gpt.out va conține linii. Pe linia se va afișa răspunsul corespunzător celui de-al -lea query, modulo .
Restricții și precizări
| # | Puncte | Restricții |
|---|---|---|
| 1 | 2 | și |
| 2 | 8 | și |
| 3 | 5 | |
| 4 | 5 | , , |
| 5 | 30 | , , |
| 6 | 40 | și |
| 7 | 10 | Fără restricții suplimentare |
Exemplu
gpt.in
7
1 2
1 3
2 4
2 5
3 6
3 7
a b a a b a b
ab
2
3 12
4 7
gpt.out
4
0
Explicație
Primul query se citește direct: , .
Valorile pentru generarea query-urilor sunt , .
Al doilea query se generează astfel:
Astfel, al doilea query devine , .
Structura arborelui este:
Muchii: , , , , ,
Token-urile nodurilor:
Șirul fix este .
- Pentru query-ul . Drumul este , iar șirul obținut este . Numărul de apariții ale subșirului este .
- Pentru query-ul : Drumul este , iar șirul obținut este . Subșirul nu apare în șirul obținut.
