받은 문자열을 사전 단어들로 나누어 변경된 글자 사이 간격을 5 이상으로 유지하며 변경 횟수를 최소화합니다.
보통6동적 계획법트라이아직 제출이 없습니다시간 제한30초메모리 제한512 MB가간은 친구 호르헤에게서 메일을 한 통 받았다. 메일에는 중요한 내용이 들어 있었지만 전송 도중에 망가졌다. 공백이 모두 사라졌고, 공백이 사라진 다음에 일부 글자가 다른 글자로 바뀌었다. 지금 가간에게 남은 것은 소문자로만 이루어진 문자열 S 하나뿐이다.
원래 메일은 아래에 주어지는 사전의 단어를 이어 붙여 만들었다. 글자가 바뀐 시점은 공백이 사라진 뒤이고, 바뀐 두 글자의 인덱스 차이는 항상 5 이상이다. 예를 들어 "code jam"은 "codejam", "dodejbm", "zodejan", "cidejab"이 될 수 있지만 "kodezam"은 될 수 없다. "k"가 놓인 인덱스와 "z"가 놓인 인덱스의 차이가 4이기 때문이다.
바뀐 글자 개수의 최솟값을 구하라.
사전에는 단어가 W개 있고 각 단어는 소문자 1자 이상 10자 이하다. 사전은 입력의 맨 앞에 한 번만 주어지고, 같은 입력에 들어 있는 모든 테스트 케이스가 이 사전을 함께 쓴다. 사전은 자연어 사전이 아니지만 영어 단어가 일부 들어 있다. 사전의 단어는 사전순으로 증가하는 순서로 주어지며 중복이 없다.
첫 줄에 사전에 있는 단어의 개수 W가 주어진다. 다음 W개 줄에 소문자 a-z로 이루어진 단어가 한 줄에 하나씩 주어진다. 그다음 줄에 테스트 케이스의 개수 T가 주어진다. 이어지는 T개 줄에 소문자 a-z로 이루어진 문자열 S가 한 줄에 하나씩 주어진다.
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 S를 만드는 동안 바뀐 글자 개수의 최솟값이다.
인덱스 차이 조건은 문자열 S 전체의 인덱스로 판단하고 단어 경계와는 상관이 없다. 어떤 단어의 마지막 글자를 바꾸고 바로 다음 단어의 첫 글자를 바꾸는 것은 두 인덱스의 차이가 1이므로 허용되지 않는다. 사전에 없는 단어는 쓸 수 없다. 영어 단어라도 사전에 들어 있지 않으면 쓸 수 없다.