Олимпиадный тренинг

Задача . G. Построй строку


Определим функцию \(f(s)\), которая принимает строку \(s\), состоящую из строчных латинских букв и точек, и возвращает строку, состоящую из строчных латинских букв следующим образом:

  1. пусть \(r\) пустая строка;
  2. будем обрабатывать символы \(s\) слева направо. Для каждого символа \(c\) выполним следующее: если \(c\) является строчной латинской буквой, то добавим \(c\) в конец строки \(r\); в противном случае удалим последний символ из \(r\) (если \(r\) пустая — функция аварийно завершает работу);
  3. вернуть \(r\) как результат функции.

Вам заданы две строки \(s\) и \(t\). Вы должны удалить минимально возможное количество символов из \(s\), чтобы \(f(s) = t\) (и функция не завершалась аварийно). Обратите внимание, что вам не разрешается вставлять новые символы в \(s\) или менять порядок существующих.

Входные данные

Входные данные состоят из двух строк: первая содержит \(s\) — строку, состоящую из строчных латинских букв и точек, вторая содержит \(t\) — строку, состоящую из строчных латинских букв (\(1 \le |t| \le |s| \le 10000\)).

Дополнительное ограничение на входные данные: можно удалить некоторое количество символов из \(s\) так, чтобы \(f(s) = t\).

Выходные данные

Выведите одно целое число — минимально возможное количество символов, которое необходимо удалить из \(s\), чтобы \(f(s)\) не завершалась аварийно и вернула \(t\) в качестве результата выполнения.


Примеры
Входные данныеВыходные данные
1 a.ba.b.
abb
2
2 .bbac..a.c.cd
bacd
3
3 c..code..c...o.d.de
code
3

time 4000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя