wind

Time limit: 3s Memory limit: 256MB Input: wind.in Output: wind.out

Gigel a intrat din nou în belele! El se află într-o matrice cu NN linii și MM coloane numerotate de la 11 la NN și respectiv de la 11 la MM. Asupra fiecărei celule acționează un vânt foarte puternic care îl împinge către una dintre celulele vecine. Mai exact, dacă la un moment dat Gigel se află în celula (i,j)(i, j), vântul îl va "lua pe sus" și îl va purta astfel încât după o secundă să ajungă în celula vecină indicată de direcția vântului din celula curentă, după cum urmează:

  • N (Nord) \rightarrow ajunge în celula (i1,j)(i - 1, j)
  • S (Sud) \rightarrow ajunge în celula (i+1,j)(i + 1, j)
  • E (Est) \rightarrow ajunge în celula (i,j+1)(i, j + 1)
  • V (Vest) \rightarrow ajunge în celula (i,j1)(i, j - 1)

Fiecare celulă din matrice conține o livadă de meri ce produce a[i][j]a[i][j] mere, inițial a[i][j]=(i1)M+ja[i][j] = (i - 1) \cdot M + j. Gigel va colecta aceste mere de fiecare dată când ajunge în celula (i,j)(i, j). De-a lungul timpului, direcția vântului se poate schimba în anumite celule, de asemenea cantitățile de mere din livezi se pot actualiza. Voi va trebui să răspundeți la o serie de interogări pentru a-l ajuta pe Gigel să afle câte mere ar colecta dacă s-ar lăsa pradă vântului pentru un număr dat de secunde. Avem astfel QQ evenimente de trei tipuri:

  • 1 i j dActualizare vânt: Direcția vântului din celula (i,j)(i, j) devine d{d \in \{N, S, E, V}\}.
  • 2 l r valActualizare mere din livadă: Toate livezile a[i][j]a[i][j] cu 1iN1 \leq i \leq N și ljrl \leq j \leq r vor produce cu valval mai multe mere.
  • 3 i j KInterogare: Dacă Gigel ar porni din celula (i,j)(i, j) și s-ar lăsa purtat de vânt prin matrice timp de exact KK secunde, câte mere ar colecta în total? Gigel va colecta inclusiv merele din celula din care începe, așadar el va colecta de fapt merele din K+1K + 1 celule. Deoarece acest număr poate fi foarte mare, se cere restul împărțirii lui la 2322^{32}. Atenție! Dacă Gigel părăsește matricea la orice moment de timp pe parcursul zborului, acesta se încheie definitiv, iar răspunsul interogării se va considera 1-1.

Cerință

Să se răspundă corect la toate interogările asociate evenimentelor de tipul 3.

Date de intrare

Pe prima linie se află numerele NN, MM și QQ, separate prin câte un spațiu. Pe următoarele NN linii se vor regăsi MM caractere dd, neseparate de spații, reprezentând direcțiile inițiale ale vântului din fiecare celulă din matrice. Fiecare dintre următoarele QQ linii descrie câte un eveniment, în formatul de mai sus.

Date de ieșire

Se va afișa pe câte o linie răspunsul la fiecare interogare asociată unui eveniment de tip 3.

Restricții și precizări

  • 1N251 \leq N \leq 25;
  • 1M50 0001 \leq M \leq 50 \ 000;
  • 1Q100 0001 \leq Q \leq 100 \ 000;
  • 1K1091 \leq K \leq 10^9;
  • 1val1091 \leq val \leq 10^9;
  • d{d \in \{N, S, E, V}\};
  • 1iN1 \leq i \leq N și 1jM1 \leq j \leq M pentru toate evenimentele de tipurile 1 și 3;
  • 1lrM1 \leq l \leq r \leq M pentru toate evenimentele de tipul 2;
  • Liniile și coloanele sunt indexate de la 1;
  • Interogările se consideră pe matricele curente de la pasul respectiv, ele nu se schimbă în timp ce Gigel este purtat de vânt.
# Punctaj Restricții
1 7 M,Q,K2 000M, Q, K \leq 2 \ 000
2 9 M200M \leq 200, Q2 000Q \leq 2 \ 000
3 11 N=1N = 1
4 14 N10N \leq 10 și vântul nu este niciodată în direcția Nord
5 11 N10N \leq 10 și toate evenimentele sunt interogări
6 27 N10N \leq 10 și Q30 000Q \leq 30 \ 000
7 11 N10N \leq 10
8 10 Fără restricții suplimentare

Exemplul 1

wind.in

2 6 6
EEESES
NEEENE
3 1 1 9
3 1 2 5
2 3 4 10
3 1 3 4
1 2 4 V
3 1 2 5

wind.out

-1
35
63
88

Explicație

În continuare explicăm primul exemplu.

Starea Inițială

Datele de intrare specifică N=2N = 2, M=6M = 6 și Q=6Q = 6. Matricea inițială a merelor A0A_0 se calculează cu formula a[i][j]=(i1)M+ja[i][j] = (i - 1) \cdot M + j:

A0=(123456789101112)A_0 = \begin{pmatrix} 1 & 2 & 3 & 4 & 5 & 6 \\ 7 & 8 & 9 & 10 & 11 & 12 \end{pmatrix}

Matricea inițială a direcțiilor vântului D0D_0 este preluată direct din datele de intrare:

D0=(EEESESNEEENE)D_0 = \begin{pmatrix} \text{E} & \text{E} & \text{E} & \text{S} & \text{E} & \text{S} \\ \text{N} & \text{E} & \text{E} & \text{E} & \text{N} & \text{E} \end{pmatrix}

Evenimentul 1: 3 1 1 9

Tipul 3: Interogare traseu pornind din (1,1)(1, 1) timp de K=9K = 9 secunde.

Traseul și Merele Colectate:

Start (1,1)[+1]E+2(1,2)E+3(1,3)E+4(1,4)S+10(2,4)E+11(2,5)N+5(1,5)E+6(1,6)S+12(2,6)EIeșireAfara˘ din matrice!\text{Start } (1, 1)_{[+1]} \xrightarrow{\text{E}}_{+2} (1, 2) \xrightarrow{\text{E}}_{+3} (1, 3) \xrightarrow{\text{E}}_{+4} (1, 4) \xrightarrow{\text{S}}_{+10} (2, 4) \xrightarrow{\text{E}}_{+11} (2, 5) \\\xrightarrow{\text{N}}_{+5} (1, 5) \xrightarrow{\text{E}}_{+6} (1, 6) \xrightarrow{\text{S}}_{+12} (2, 6) \xrightarrow{\text{E}}_{\text{Ieșire}} \text{Afară din matrice!}

Explicație: După 9 secunde, Gigel părăsește matricea prin Est. Zborul se încheie.

Rezultat afișat: 1-1

Evenimentul 2: 3 1 2 5

Tipul 3: Interogare traseu pornind din (1,2)(1, 2) timp de K=5K = 5 secunde.

Traseul și Merele Colectate:

Start (1,2)[+2]E+3(1,3)E+4(1,4)S+10(2,4)E+11(2,5)N+5(1,5)\text{Start } (1, 2)_{[+2]} \xrightarrow{\text{E}}_{+3} (1, 3) \xrightarrow{\text{E}}_{+4} (1, 4) \xrightarrow{\text{S}}_{+10} (2, 4) \xrightarrow{\text{E}}_{+11} (2, 5) \xrightarrow{\text{N}}_{+5} (1, 5)

Total Mere: 2+3+4+10+11+5=352 + 3 + 4 + 10 + 11 + 5 = \mathbf{35}

Evenimentul 3: 2 3 4 10

Tipul 2: Se adaugă câte 1010 mere în toate celulele de pe coloanele 33 și 44.

Matricea Merelor Actualizată A1A_1:

A1=(121314567819201112)A_1 = \begin{pmatrix} 1 & 2 & 13 & 14 & 5 & 6 \\ 7 & 8 & 19 & 20 & 11 & 12 \end{pmatrix}

Evenimentul 4: 3 1 3 4

Tipul 3: Interogare traseu pornind din (1,3)(1, 3) timp de K=4K = 4 secunde.

Traseul și Merele Colectate:

Start (1,3)[+13]E+14(1,4)S+20(2,4)E+11(2,5)N+5(1,5)\text{Start } (1, 3)_{[+13]} \xrightarrow{\text{E}}_{+14} (1, 4) \xrightarrow{\text{S}}_{+20} (2, 4) \xrightarrow{\text{E}}_{+11} (2, 5) \xrightarrow{\text{N}}_{+5} (1, 5)

Total Mere: 13+14+20+11+5=6313 + 14 + 20 + 11 + 5 = \mathbf{63}

Evenimentul 5: 1 2 4 V

Tipul 1: Se schimbă direcția vântului în celula (2,4)(2, 4) în Vest (V).

Matricea Direcțiilor Actualizată D1D_1:

D1=(EEESESNEEVNE)D_1 = \begin{pmatrix} \text{E} & \text{E} & \text{E} & \text{S} & \text{E} & \text{S} \\ \text{N} & \text{E} & \text{E} & \text{V} & \text{N} & \text{E} \end{pmatrix}

Evenimentul 6: 3 1 2 5

Tipul 3: Interogare traseu pornind din (1,2)(1, 2) timp de K=5K = 5 secunde.

Traseul și Merele Colectate:

Start (1,2)[+2]E+13(1,3)E+14(1,4)S+20(2,4)V+19(2,3)E+20(2,4)\text{Start } (1, 2)_{[+2]} \xrightarrow{\text{E}}_{+13} (1, 3) \xrightarrow{\text{E}}_{+14} (1, 4) \xrightarrow{\text{S}}_{+20} (2, 4) \xrightarrow{\text{V}}_{+19} (2, 3) \xrightarrow{\text{E}}_{+20} (2, 4)

Total Mere: 2+13+14+20+19+20=882 + 13 + 14 + 20 + 19 + 20 = \mathbf{88}

Exemplul 2

wind.in

3 4 10
EESV
NVES
EENN
3 1 1 2
3 1 1 1000000000
1 2 4 V
3 1 1 100
2 3 4 10
3 1 1 100
1 2 3 N
3 1 1 10
1 1 3 N
3 1 1 5

wind.out

6
1410065389
741
1731
136
-1

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