pattern

Time limit: 0.35s Memory limit: 8MB Input: pattern.in Output: pattern.out

Se dau un text şi o mască formate din litere mici ale alfabetului englez. În plus, în mască pot apărea caracterele speciale ? şi *.

Spunem că masca se potriveşte peste o subsecvenţă SS din text dacă şi numai dacă înlocuind fiecare caracter ? cu exact o literă (câte o literă pentru fiecare ? din mască) şi fiecare * cu o secvenţă de litere (eventual vidă; câte una pentru fiecare * din mască) se obţine subsecvenţa SS.

Două potriviri peste aceeaşi subsecvenţă SS sunt considerate diferite dacă există cel puţin un character special care se înlocuieşte cu un caracter/secvenţă de pe alte poziţii din SS în cele două potriviri. De asemenea, două potriviri peste subsecvenţe diferite din text sunt considerate distincte. Două subsecvenţe sunt considerate diferite dacă se găsesc pe poziţii diferite în text, chiar dacă ele sunt egale dacă le comparăm ca string-uri.

Cerinţă

Aflaţi numărul de potriviri distincte ale măştii în text.

Date de intrare

Pe prima linie a fişierului de intrare pattern.in se găseşte un număr TT care reprezintă numărul de teste. Urmează câte două linii pentru fiecare test: pe prima linie textul iar pe a doua masca pentru testul respectiv.

Date de ieșire

În fişierul de ieşire pattern.out se vor găsi TT linii conţinând câte un singur număr egal cu numărul posibilităţilor de potrivire a măştii în text modulo 1 000 000 0071 \ 000 \ 000 \ 007 pentru fiecare test.

Restricții și precizări

  • 1T31 \leq T \leq 3
  • 1lungime(text)100 0001 \leq lungime(text) \leq 100 \ 000
  • 1lungime(masca˘)50 0001 \leq lungime(mască) \leq 50 \ 000
  • Pentru 40%40\% din teste: lungime(text)3000lungime(text) \leq 3 000 şi lungime(masca˘)1 000lungime(mască) \leq 1 \ 000
  • Numărul caracterelor speciale din mască va fi mai mic decât 101101.
  • În mască nu vor exista două * alăturate şi există cel puţin o literă.

Exemplu

pattern.in

3
aababba
a?b*
abbabbcbaba
?c?
aaa
a*a*

pattern.out

7
1
4

Explicație

În primul test avem următoarele potriviri: aababba, aababba, aababba, aababba, aababba, aababba, aababba.
Pentru al doilea test avem o singură potrivire: abbabbcbaba.
Pentru al treilea test avem potrivirile (caracterele subliniate sunt potrivite peste *): aaa, aaa, aa\underline{a}a, aaa\underline{a}

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