DNA 복사

시간 제한1초메모리 제한128 MB

요약
길이 18 이하인 원본 문자열 S에서 연속 부분 문자열을 복사하거나, 이미 만든 T의 연속 부분을 복사해(뒤집기 허용) 목표 문자열 T를 완성하는 최소 복사 횟수를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 문자열, 완전 탐색
정답자
아직 제출이 없습니다

문제

상근이는 졸업 프로젝트로 DNA 복사를 시뮬레이션하기로 했다.

DNA 문자열은 알파벳 A, C, G, T로만 이루어져 있다. 원본 문자열 SS가 주어졌을 때, 목표 문자열 TT를 만드는 데 필요한 최소 복사 횟수를 구하자.

한 번의 복사는 다음 규칙을 따른다.

  • 복사할 문자열은 SS의 연속된 일부이거나, 지금까지 만들어 둔 TT의 연속된 일부여야 한다.
  • 복사할 때 문자열을 뒤집어서 붙여도 된다.
  • 복사한 문자열은 TT의 연속된 한 구간을 채우며, 모든 구간이 채워지면 TT가 완성된다.

즉, 완성된 TT의 각 위치는 정확히 한 번의 복사로 채워지고, SS에서 복사하거나 이미 채워 둔 부분에서 복사할 수 있다(뒤집기 허용). 채우는 순서는 자유이며, 어떤 부분을 복사원으로 쓰려면 그 부분이 복사 시점에 이미 완성되어 있어야 한다.

예를 들어 S=S = ACTG, T=T = GTACAATTAAT인 경우 다음과 같이 55번 만에 만들 수 있다.

  1. SS에서 TG를 복사한 뒤 뒤집어 GT로 붙인다 → GT.........
  2. SS에서 AC를 복사해 붙인다 → GTAC.......
  3. 이미 만든 부분에 있는 TA를 복사해 붙인다 → GTAC...TA..
  4. TA를 복사한 뒤 뒤집어 AT로 붙인다 → GTAC...TAAT
  5. 이미 만든 부분에 있는 AAT를 복사해 붙인다 → GTACAATTAAT

입력

첫째 줄에 테스트 케이스의 개수 tt가 주어진다(1≤t≤1001 \le t \le 100). 각 테스트 케이스는 두 줄로 이루어지며, 첫 줄에 문자열 SS, 둘째 줄에 문자열 TT가 주어진다. 두 문자열은 알파벳 A, C, G, T로만 이루어지고 길이는 11 이상 1818 이하이다.

출력

각 테스트 케이스마다 TT를 만드는 데 필요한 최소 복사 횟수를 한 줄에 출력한다. 만들 수 없으면 impossible을 출력한다.

예제4

  1. 예제 1

    입력
    5
    ACGT
    GTAC
    A
    C
    ACGT
    TGCA
    ACGT
    TCGATCGA
    A
    AAAAAAAAAAAAAAAAAA
    
    예상 출력
    2
    impossible
    1
    4
    6
    
  2. 예제 2

    입력
    1
    ACGT
    ACGT
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1
    AC
    CA
    
    예상 출력
    1
    
  4. 예제 4

    입력
    1
    A
    AA
    
    예상 출력
    2