loop

Time limit: 3s Memory limit: 512MB Input: loop.in Output: loop.out

Participi la un concurs de robotică unde scopul este să programezi un robețel care se deplasează într-un labirint de dimensiuni N×MN \times M. Labirintul este reprezentat printr-o matrice binară, unde ai,j=1a_{i,j} = 1 semnifică o celulă blocată, iar ai,j=0a_{i,j} = 0 semnifică o celulă liberă. Liniile și coloanele matricei sunt indexate de la 11.

Înaintea începerii competiției, concurenții primesc matricea binară care descrie labirintul și două celule distincte (1,c1)(\ell_1, c_1) și (2,c2)(\ell_2, c_2) din aceasta. Robețelul tău va fi plasat inițial în celula (1,c1)(\ell_1, c_1) și trebuie să se deplaseze până la celula (2,c2)(\ell_2, c_2), 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 kk și o secvență de kk 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 pp și vei plasa secvența de comenzi într-o structură repetitivă care se execută de pp ori, ca mai jos:

Notăm cu SpS_p mulțimea de secvențe de comenzi ss care, executate secvențial de pp ori consecutiv, ar duce robețelul din (1,c1)(\ell_1, c_1) în (2,c2)(\ell_2, c_2) fără să treacă prin celule blocate sau să iasă din matrice. Notăm cu TpT_p submulțimea de secvențe din SpS_p al căror număr de comenzi este minim în SpS_p. Mai riguros:

Tp:={sSpsSp astfel ıˆncaˆs consta˘ din mai puține comenzi ca s}.T_p := \{s \in S_p \mid \nexists s' \in S_p \text{ astfel încât } s' \text{ constă din mai puține comenzi ca } s\}.

Observăm că TpT_p va fi vidă dacă SpS_p este vidă.

Cerință

Se cere să se determine câte elemente are mulțimea TkT_k pentru toate mulțimile TkT_k nevide, unde 1kNM1 \leq k \leq N \cdot M, modulo 109+710^9 + 7.

Date de intrare

Prima linie va conține NN și MM, dimensiunile matricei, separate printr-un spațiu. A doua linie va conține coordonatele celulei de start, 1\ell_1 și c1c_1, separate printr-un spațiu. A treia linie va conține coordonatele celulei de final, 2\ell_2 și c2c_2, separate printr-un spațiu. Pe următoarele NN linii se vor găsi câte MM caractere de 00 sau 11, reprezentând conținutul celulelor matricei.

Date de ieșire

Pe prima linie se va afișa un număr natural CC, reprezentând numărul de mulțimi TkT_k care sunt nevide, unde 1kNM1 \leq k \leq N \cdot M. Pe următoarele CC rânduri, se va afișa pe fiecare rând, separat printr-un spațiu, o pereche (p,r)(p, r), cu semnificația că rr este restul numărului de elemente a mulțimii TpT_p la împărțirea cu 109+710^9 + 7.

Afișarea va fi făcută în ordine crescătoare după p.

Restricții și precizări

  • 1NM1 700 0001 \leq N \cdot M \leq 1 \ 700 \ 000;
  • 11,2N1 \leq \ell_1, \ell_2 \leq N și 1c1,c2M1 \leq c_1, c_2 \leq M;
  • (1,c1)(2,c2)(\ell_1, c_1) \neq (\ell_2, c_2).
# Punctaj Restricții
1 8 NM12N \cdot M \leq 12
2 7 Se garantează că Sp=S_p = \emptyset oricare ar fi p>1p > 1 și 5N,M5 \leq N, M
3 19 Nu există celule blocate și 5N,M5 \leq N, M
4 29 NM2 500N \cdot M \leq 2 \ 500
5 37 5N,M5 \leq N, M

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 11) și există 5050 de astfel de drumuri. Al doilea tip de drum periodic este acela care se repetă de două ori (are perioada 22) și există 66 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

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