eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків

Cutting

Задано рядок \textbf{S} та список \textbf{M}, який складаєься з \textbf{N} слів. За одну операцію можна вибрати деякий підрядок рядка \textbf{S}, якщо такий зустрічається у якості слова у списку \textbf{M}, і вирізати з рядка \textbf{S}. Після чого, частини рядка \textbf{S}, що залишились і якщо такі є, склюються. Визначити, за яку мінімальну кількість операцій можна знищити весь рядок \textbf{S}. Гарантується, що це можна зробити. \InputFile У першому рядку слово \textbf{S}. У другому рядку ціле число \textbf{N} --- кількість слів у списку. Далі \textbf{N} рядків, у кожному з яких по одному слову зі списку \textbf{M}. Усі слова складаються лише з рядкових латинських літер. \OutputFile Одне число --- мінімальна кількість операцій, необхідна для знищення рядка \textbf{S}. \textbf{Обмеження} \textbf{1} ≤ |\textbf{S}| ≤ \textbf{100} \textbf{1} ≤ \textbf{N} ≤ \textbf{100} \textbf{1} ≤ |\textbf{M_i}| ≤ \textbf{100}
Ліміт часу 5 секунд
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
abacaba
4
aba
aca
a
b
Вихідні дані #1
3

Пояснення: Першою операцією вирізали підрядок "aca", отримали "abba". Другою операцією вирізали підрядок "b", отримали "aba". Третьою операцією видалили весь рядок "aba".