Participi la un concurs de robotică unde scopul este să programezi un robețel care se deplasează într-un labirint de dimensiuni . Labirintul este reprezentat printr-o matrice binară, unde semnifică o celulă blocată, iar semnifică o celulă liberă. Liniile și coloanele matricei sunt indexate de la .
Înaintea începerii competiției, concurenții primesc matricea binară care descrie labirintul și două celule distincte și din aceasta. Robețelul tău va fi plasat inițial în celula și trebuie să se deplaseze până la celula , fără să treacă prin celule blocate sau să părăsească labirintul.
Tu trebuie să programezi robețelul, alegând un număr de instrucțiuni și o secvență de comenzi de tipurile sus, jos, stânga și dreapta. Fiecare comandă mișcă robețelul cu o unitate în direcția indicată de comandă. După ce ai ales secvența, vei alege și un număr și vei plasa secvența de comenzi într-o structură repetitivă care se execută de ori, ca mai jos:

Notăm cu mulțimea de secvențe de comenzi care, executate secvențial de ori consecutiv, ar duce robețelul din în fără să treacă prin celule blocate sau să iasă din matrice. Notăm cu submulțimea de secvențe din al căror număr de comenzi este minim în . Mai riguros:
Observăm că va fi vidă dacă este vidă.
Cerință
Se cere să se determine câte elemente are mulțimea pentru toate mulțimile nevide, unde , modulo .
Date de intrare
Prima linie va conține și , dimensiunile matricei, separate printr-un spațiu. A doua linie va conține coordonatele celulei de start, și , separate printr-un spațiu. A treia linie va conține coordonatele celulei de final, și , separate printr-un spațiu. Pe următoarele linii se vor găsi câte caractere de sau , reprezentând conținutul celulelor matricei.
Date de ieșire
Pe prima linie se va afișa un număr natural , reprezentând numărul de mulțimi care sunt nevide, unde . Pe următoarele rânduri, se va afișa pe fiecare rând, separat printr-un spațiu, o pereche , cu semnificația că este restul numărului de elemente a mulțimii la împărțirea cu .
Afișarea va fi făcută în ordine crescătoare după p.
Restricții și precizări
- ;
- și ;
- .
| # | Punctaj | Restricții |
|---|---|---|
| 1 | 8 | |
| 2 | 7 | Se garantează că oricare ar fi și |
| 3 | 19 | Nu există celule blocate și |
| 4 | 29 | |
| 5 | 37 |
Exemplul 1
loop.in
5 9
2 1 4 9
010000000
001001000
001000000
000000100
000000000
loop.out
2
1 50
2 6
Explicație
Pentru primul exemplu există două drumuri periodice. Primul tip de drum periodic este acela în care se repetă o singură dată secvența de miscări (are perioada ) și există de astfel de drumuri. Al doilea tip de drum periodic este acela care se repetă de două ori (are perioada ) și există astfel de drumuri distincte (un exemplu ar fi: dreapta, jos, jos, dreapta, dreapta, sus, dreapta corespunzător desenului de mai sus).
Exemplul 2
loop.in
7 10
1 1 7 10
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
loop.out
2
1 5005
3 10