Se consideră un set de două șiruri de caractere X
și Y
. Șirul X
este format din caractere din mulțimea {'A'..'Z', 'a' ..'z', '*'}
, iar șirul Y
este format din caractere din mulțimea {'A'..'Z', 'a'..'z'}
. Lungimea șirului Y
este mai mare sau egală cu numărul de caractere *
din X
. Caracterele *
din șirul X
vor fi înlocuite cu caractere din Y
, evident fără a depăși numărul de apariții ale acestora.
Cerința
Fiind date N
seturi de câte două șiruri fiecare, (X
1
, Y
1
), (X
2
, Y
2
), …, (X
N
, Y
N
), să se determine lungimea celui mai lung subșir strict crescător ce se poate forma în X
i
prin înlocuirea caracterelor *
cu caractere din Y
i
, 1 ≤ i ≤ N
.
Date de intrare
Fișierul de intrare addchar.in
conține pe prima linie numărul natural nenul N
, iar apoi pe linii distincte, cele N
seturi de câte două șiruri: (X
1
, Y
1
), (X
2
, Y
2
), …, (X
N
, Y
N
).
Date de ieșire
Fișierul de ieșire addchar.out
va avea N
linii. Fiecare linie conține o singură valoare naturală ce reprezintă lungimea celui mai lung subșir strict crescător ce se poate forma în X
i
prin înlocuirea caracterelor *
cu caractere din Y
i
, 1 ≤ i ≤ N
.
Restricții și precizări
1 ≤ N ≤ 20
2 ≤ lungimea(X
i
) ≤ 10000
1 ≤ lungimea(Y
i
) < 10000
1 ≤ număr maxim de caractere '*' ≤ min(5000, lungimea(Y
i
))
Exemplu:
addchar.in
2 C*a**Fceb*B DbaAaBA z*y*tm** ceAB
addchar.out
6 4
Explicație
Sunt două perechi de șiruri. Prima pereche este X1 = C*a**Fceb*B
, Y1 = DbaAaBA
.
Se pot forma mai multe secvențe: CBaAAFcebaB
, CAaBDFcebAB
, CAaBDFcebaB
, …
Cel mai lung subșir strict crescător se obține din șirul CAaBDFcebAB
, este ABDFce
și are lungimea 6.
A doua pereche de șiruri este X2 = z*y*tm**
, Y2 = ceAB
. Cel mai lung subșir strict crescător se obține din șirul zAyBtmce
și are lungimea 4
: ABce
.