깨진 이메일 (작은 입력)

받은 문자열을 사전 단어들로 나누어 변경된 글자 사이 간격을 5 이상으로 유지하며 변경 횟수를 최소화합니다.

보통6동적 계획법트라이아직 제출이 없습니다시간 제한30초메모리 제한512 MB

문제

가간은 친구 호르헤에게서 메일을 한 통 받았다. 메일에는 중요한 내용이 들어 있었지만 전송 도중에 망가졌다. 공백이 모두 사라졌고, 공백이 사라진 다음에 일부 글자가 다른 글자로 바뀌었다. 지금 가간에게 남은 것은 소문자로만 이루어진 문자열 SS 하나뿐이다.

원래 메일은 아래에 주어지는 사전의 단어를 이어 붙여 만들었다. 글자가 바뀐 시점은 공백이 사라진 뒤이고, 바뀐 두 글자의 인덱스 차이는 항상 5 이상이다. 예를 들어 "code jam"은 "codejam", "dodejbm", "zodejan", "cidejab"이 될 수 있지만 "kodezam"은 될 수 없다. "k"가 놓인 인덱스와 "z"가 놓인 인덱스의 차이가 4이기 때문이다.

바뀐 글자 개수의 최솟값을 구하라.

사전에는 단어가 WW개 있고 각 단어는 소문자 1자 이상 10자 이하다. 사전은 입력의 맨 앞에 한 번만 주어지고, 같은 입력에 들어 있는 모든 테스트 케이스가 이 사전을 함께 쓴다. 사전은 자연어 사전이 아니지만 영어 단어가 일부 들어 있다. 사전의 단어는 사전순으로 증가하는 순서로 주어지며 중복이 없다.

입력

첫 줄에 사전에 있는 단어의 개수 WW가 주어진다. 다음 WW개 줄에 소문자 a-z로 이루어진 단어가 한 줄에 하나씩 주어진다. 그다음 줄에 테스트 케이스의 개수 TT가 주어진다. 이어지는 TT개 줄에 소문자 a-z로 이루어진 문자열 SS가 한 줄에 하나씩 주어진다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. x는 1부터 시작하는 테스트 케이스 번호이고, y는 SS를 만드는 동안 바뀐 글자 개수의 최솟값이다.

제한

  • 1W500001 \le W \le 50000
  • 사전의 각 단어는 소문자 1자 이상 10자 이하다.
  • 사전은 사전순으로 증가하는 순서이고 같은 단어가 두 번 나오지 않는다.
  • 사전에 있는 글자 개수의 합은 350000 이하다.
  • 1T201 \le T \le 20
  • 1S501 \le |S| \le 50
  • SS는 항상 위 방법으로 만들 수 있다.

힌트

인덱스 차이 조건은 문자열 SS 전체의 인덱스로 판단하고 단어 경계와는 상관이 없다. 어떤 단어의 마지막 글자를 바꾸고 바로 다음 단어의 첫 글자를 바꾸는 것은 두 인덱스의 차이가 1이므로 허용되지 않는다. 사전에 없는 단어는 쓸 수 없다. 영어 단어라도 사전에 들어 있지 않으면 쓸 수 없다.