생체의공학
면접 대비시간 제한1초메모리 제한128 MB
목표 문자열과 재사용 가능한 조각 문자열들이 주어질 때, 조각들을 이어 붙여 목표 문자열을 만들 수 있는 최소 조각 수를 구하거나 불가능함을 판정한다.
문제
생체의공학은 생물학적 현상을 이용하여 아주 작은 규모에서 약물이나 다른 물질을 설계하려는 분야이다. 새로운 약물을 설계할 때 중요한 점은, 약물이 몸속의 올바른 수용체 세포에 결합하여 특정 반응을 일으키거나 억제하도록 만드는 것이다. 실제 생물학은 매우 복잡하므로, 여기서는 다음과 같이 단순화한 모형을 사용한다.
결합 부위(docking site)는 개의 문자로 이루어진 문자열 로 나타내며, 이는 연속한 개 위치의 화학적 성질을 뜻한다. 우리는 주어진 기본 구성 요소들을 이어 붙여 이 부위에 결합하는 문자열을 조립하려고 한다. 구성 요소로는 개의 문자열 이 주어지며, 각 는 개의 문자로 이루어져 있다. 목표는 이 구성 요소들을 순서대로 골라 이어 붙였을 때 그 결과가 와 정확히 같아지도록 하는 것이다. 각 구성 요소의 공급량은 무제한이므로, 같은 를 원하는 만큼 여러 번 사용할 수 있다.
입력
첫째 줄에 데이터 집합의 개수를 나타내는 정수 이 주어진다. 이어서 개의 데이터 집합이 다음 형식으로 주어진다.
- 데이터 집합의 첫째 줄에는 사용할 수 있는 구성 요소 문자열의 개수 ()이 주어진다.
- 둘째 줄에는 문자열 가 주어진다. 의 길이는 이상 이하이며, 대소문자 영문자로만 이루어진다.
- 다음 개의 줄에는 각각 구성 요소 문자열 가 하나씩 주어진다. 각 의 길이는 이상 이하이며, 대소문자 영문자로만 이루어진다.
문자열 비교는 대소문자를 구분한다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 여기서 는 데이터 집합의 번호이며 부터 시작한다. 그다음 줄에는 를 조립하는 데 필요한 구성 요소의 최소 개수를 출력한다. 만약 를 조립할 수 없다면 대신 Impossible을 출력한다.