새로운 교육 과정 개편의 일환으로, 전산학과는 교재를 검열하기로 했다. 이 문제에서는 입력으로 주어진 텍스트 문자열에서 필터 단어 집합에 속한 모든 문자열을 제거하는 프로그램을 작성해야 한다.
형식적으로, 단어 w가 문자열 s의 부분 문자열이면(즉 w의 문자들이 s 안에서 연속해서 나타나면) w를 s에서 제거할 수 있다. 텍스트 문자열 s와 필터 단어 집합 T가 주어질 때, T의 단어들을 반복적으로 제거하여 만들 수 있는 가장 짧은 문자열의 길이를 구하여라. T의 각 단어는 횟수 제한 없이 제거할 수 있으며, 한 단어를 제거하면 새로운 부분 문자열이 생겨 또 다른 단어를 제거할 수도 있다.
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 필터 집합 T의 크기를 나타내는 정수 n (1≤n≤50)으로 시작하고, 이어서 처리할 텍스트 문자열 s, 그리고 T에 속한 n개의 단어 t1,…,tn이 주어진다. 텍스트 문자열과 모든 필터 단어는 소문자 'a'부터 'z'까지만으로 이루어지며 길이는 1 이상 50 이하이다. 한 테스트 케이스 안의 필터 단어는 모두 서로 다르다. 입력의 끝은 정수 0 하나만 있는 줄로 표시되며, 이 줄은 처리하지 않는다.
각 테스트 케이스마다 만들 수 있는 결과 문자열의 최소 길이를 정수 하나로 출력한다.
[…]는 각 단계에서 제거되는 단어를 나타내고, ∅는 빈 문자열을 뜻한다.
c[cde]defcde → [cde]fcde → f[cde] → f[aa]baab → [ba]ab → [ab] → ∅[aa]baab → b[aa]b → [bb] → ∅