Se numește subsecvență a unui șir de caractere s un șir de caractere t cu proprietatea că există doi indici i și j cu 0≤i≤j<∣s∣ astfel încât t=sisi+1si+2...sj.
Pentru un tuplu de șiruri de caractere (s0,s1,s2,...,sK−1) vom defini f(s0,s1,s2,...,sK−1) ca fiind șirul minim lexicografic1 ce se poate obține prin următorul procedeu:
- Pentru fiecare șir si, se alege o subsecvență nevidă ti a sa;
- Se concatenează t0,t1,t2,...,tK−1, șirul obținut fiind rezultatul procedeului.
1 Un șir de caractere a0a1…an−1 este mai mic lexicografic decât un alt șir de caractere b0b1…bm−1 dacă și numai dacă:
- Există un indice i (0≤i<min(n,m)) pentru care a0a1…ai−1=b0b1…bi−1 și ai<bi; sau
- n<m și a0a1…an−1=b0b1…bn−1.
Cerință
Se dau un număr natural N, un șir de caractere de lungime N, notat w, un număr natural K și un șir de K numere naturale nenule l0,l1,l2,...,lK−1. Să se numere câte tupluri de K șiruri de caractere, (s0,s1,s2,...,sK−1) respectă următoarele condiții:
- Toate șirurile conțin doar litere mici ale alfabetului englez
- ∣si∣=li, ∀1≤i≤K
- f(s0,s1,s2,...,sK−1)=w
Deoarece acest număr poate fi mare, se cere restul acestuia la împărțirea prin 998 244 353.
Detalii de implementare
Concurenții vor avea de implementat o singură funcție:
int solve(int N, int K, std::string w, std::vector<int> l);
care primește ca parametri:
- N, numărul de caractere din șirul w
- K, numărul de șiruri dintr-un tuplu
- Șirul w (indexat de la 0)
- l, reprezentând lungimile șirurilor (indexat de la 0)
Funcția solve va fi apelată o singură dată.
Restricții
- 1≤K≤N≤200
- 1≤li≤200, 0≤i≤N−1
- Șirul w este format doar din litere mici ale alfabetului englez
- Vom considera wi al i-lea caracter din șirul w
| # |
Punctaj |
Restricții |
| 1 |
7 |
1≤K≤N≤7, ∑0K−1li≤8 și w conține doar caracterele a, b, c, d |
| 2 |
8 |
1≤K≤N≤25 și li=3, ∀ 0≤i<N |
| 3 |
11 |
K=2 |
| 4 |
14 |
1≤K≤N≤120, 1≤li≤120 și wi≤wi+1,∀ 0≤i<N−1 (șirul w este crescător) |
| 5 |
23 |
1≤K≤N≤90 și 1≤li≤90, ∀ 0≤i<N |
| 6 |
21 |
1≤K≤N≤150 și 1≤li≤150, ∀ 0≤i<N |
| 7 |
16 |
Fără restricții suplimentare. |
Exemplul 1
input
4 3
babz
1 2 1
output
1
Explicație
Pentru primul exemplu, singurul tuplu valid este ("b", "ab", "z").
Exemplul 2
input
4 3
babz
1 3 1
output
26
Exemplul 3
input
6 4
abcbzz
3 3 3 3
output
1849