Nam Lei
Date de intrare si iesire
Pe prima linie a fisierului namlei.in se afla numerele N si K, separate de un spatiu. Pe a doua linie a fisierului se afla numerele X si Y, separate de un spatiu. Pe fiecare din urmatoarele N linii se afla cate un triplet de numere cnt, j, k. Acest triplet de pe linia a i-a (i intre 0 si N-1) inseamna ca intre orasele i si i+1 exista (in afara de cele K*K muchii obligatorii) cnt muchii dintre care prima este (i, j) - (i+1, k). Daca a (w-1)-a muchie este (i, j) – (i+1, k), a w-a muchie (i, j') – (i+1, k') se calculeaza dupa urmatoarea formula:
j' = (j*X+k*w*Y)%K
k' = (j*w*X+k*Y)%K
Cele w muchii sunt numerotate 0..w-1.
Pana la sfarsitul fisierului, fiecare pereche de doua linii reprezinta o operatie U sau Q. Pe prima dintre linii se afla tipul operatei, iar pe a doua parametrii care determina aceasta operatie.
In cazul unei operatii de tipul U:
A doua linie contine numerele i, cnt, j, k separate prin cate un spatiu. Acest cvadruplet inseamna ca (dupa eliminarea muchiilor care existau deja) intre orasele i si i+1 exista (in afara de cele K*K muchii obligatorii) cnt muchii dintre care prima este (i, j) - (i+1, k). Daca a (w-1)-a muchie este (i, j) – (i+1, k), a w-a muchie (i, j') – (i+1, k') se calculeaza dupa urmatoarea formula:
j' = (j*X+k*w*Y+1)%K
k' = (j*w*X+k*Y+1)%K
Cele w muchii sunt numerotate 0..w-1.
ATENTIE ! Din cauza unor considerente intim legate de natura problemei, aceste formule difera printr-un +1 de formulele precedente.
In cazul unei operatii de tipul Q:
A doua linie contine numerele i, x, j, y separate prin cate un spatiu. In acest caz trebuie afisat numarul de drumuri distincte de exact j-i muchii intre obiectivele (i, x) si (j, y). i este strict mai mic decat j. Toate rezultatele se vor afisa modulo 997. Raspunsurile vor fi afisate in fisierul namlei.out in ordinea in care sunt puse intrebarile, fiecare raspuns pe o linie separata.
Restricţii
§ 1 ≤ N ≤ 30.000
§ 3 ≤ K ≤ 8
§ 1 ≤ cnt ≤ 120
§ Exista cel mult 1.000 de operatii din fiecare tip
Exemplu
namlei.in |
namlei.out |
4 3 17 19 3 1 0 3 2 2 4 0 2 4 2 2 Q 1 2 3 0 U 1 4 1 0 Q 0 2 3 0 |
4 21 |