enigma

Time limit: 0.2s Memory limit: 96MB Input: enigma.in Output: enigma.out

Green şi Riemann sunt doi prieteni buni cărora le place să joace un joc numit “enigma”. În acest joc, unul dintre ei scrie un cuvânt format din NN caractere, iar celălalt vine cu MM cuvinte de maxim SS caractere. Scopul celui de-al doilea jucător este să îşi dea seama în câte moduri poate primul cuvânt să fie format din concatenarea prefixelor unor cuvinte dintre cele MM.
Dacă s-a găsit un mod de a forma primul cuvânt, atunci fiecare poziţie ii a acestuia va avea asociată o pereche (x,y)(x, y), semnificând faptul că poziţia i este acoperită de al yy-lea caracter din cuvântul xx. Astfel, două moduri de a forma primul cuvânt sunt considerate diferite dacă există două poziţii ii şi jj, cu perechile asociate (x1,y1)(x_1, y_1) şi (x2,y2)(x_2, y_2) astfel încât x1x2x_1 \neq x_2 sau y1y2y_1 \neq y_2 .

Cerință

Realizaţi un program care să rezolve jocul “enigma”!

Date de intrare

Fişierul de intrare enigma.in va conţine pe prima linie două numere NN şi MM cu semnificaţia din enunţ. A doua linie va conţine primul cuvânt format din NN caractere. Urmează MM linii, fiecare conţinând un cuvânt de maxim SS caractere.

Date de ieșire

Fişierul de ieşire enigma.out va conţine pe prima linie numărul de moduri în care primul cuvant poate fi obţinut din concatenarea prefixelor unor cuvinte dintre cele MM, modulo 31 33331 \ 333.

Restricții și precizări

  • 1N300 0001 \leq N \leq 300 \ 000
  • 1M4 5001 \leq M \leq 4 \ 500
  • 1S1001 \leq S \leq 100
  • un caracter este definit ca fiind o literă mică din alfabetul englez
  • un cuvânt poate apărea de mai multe ori
  • prefixele cuvintelor pot fi doar concatenate, nu şi suprapuse

Exemplul 1

enigma.in

7 3
xxxabdc
xxx
abdc
c

enigma.out

8

Explicație

Considerând numerotarea cuvintelor cea din fişierul de intare, perechile asociate poziţiilor primului cuvânt sunt:

1. (1,1) (1,1) (1,1) (2,1) (2,2) (2,3) (2,4)(1, 1) \ (1, 1) \ (1, 1) \ (2, 1) \ (2, 2) \ (2, 3) \ (2, 4); 
2. (1,1) (1,2) (1,1) (2,1) (2,2) (2,3) (2,4)(1, 1) \ (1, 2) \ (1, 1) \ (2, 1) \ (2, 2) \ (2, 3) \ (2, 4);
3. (1,1) (1,1) (1,2) (2,1) (2,2) (2,3) (2,4)(1, 1) \ (1, 1) \ (1, 2) \ (2, 1) \ (2, 2) \ (2, 3) \ (2, 4);
4. (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (2,4)(1, 1) \ (1, 2) \ (1, 3) \ (2, 1) \ (2, 2) \ (2, 3) \ (2, 4);
5. (1,1) (1,1) (1,1) (2,1) (2,2) (2,3) (3,1)(1, 1) \ (1, 1) \ (1, 1) \ (2, 1) \ (2, 2) \ (2, 3) \ (3, 1);
6. (1,1) (1,2) (1,1) (2,1) (2,2) (2,3) (3,1)(1, 1) \ (1, 2) \ (1, 1) \ (2, 1) \ (2, 2) \ (2, 3) \ (3, 1);
7. (1,1) (1,1) (1,2) (2,1) (2,2) (2,3) (3,1)(1, 1) \ (1, 1) \ (1, 2) \ (2, 1) \ (2, 2) \ (2, 3) \ (3, 1);
8. (1,1) (1,2) (1,3) (2,1) (2,2) (2,3) (3,1)(1, 1) \ (1, 2) \ (1, 3) \ (2, 1) \ (2, 2) \ (2, 3) \ (3, 1);

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