만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

두 배

시간 제한3초메모리 제한1024 MB

요약
글자 쌍 (s, c)가 주어지면 c를 입력할 때 메시지가 두 배가 되는 규칙에서, 빈 문자열로부터 T를 만드는 최소 입력 횟수를 구합니다.
난이도

보통10점 중 7점

유형
문자열, 동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

밍구는 차세대 채팅 앱 ChatChatA를 개발했다!

ChatChatA를 배포하고 나니 치명적인 버그 리포트가 밍구에게 날아왔다. 메시지를 입력하는 과정에서, 메시지의 마지막 글자가 특정 글자일 때 또 다른 특정 글자를 입력하면 메시지가 "두 배" 된다는 것이다!

정확히 설명하면, "두 배" 되는 경우는 다음과 같다.

  • 현재 입력 중인 메시지를 MM, MM의 마지막 글자를 ss, 입력할 글자를 cc라고 하자.
  • 메시지가 "두 배" 되는 (s,c)(s, c) 쌍의 집합을 DD라 하자.
    • (s,c)∈D(s, c) \in D이면, cc를 입력했을 때 MM은 M+cM + c가 아닌 M+M+cM + M + c가 된다.
    • (s,c)∉D(s, c) \notin D이면, cc를 입력했을 때 MM은 M+cM + c가 된다.
  • MM이 빈 문자열이라면 MM은 "두 배" 되지 않는다.

ChatChatA의 사용자인 구밍이는 문자열 TT를 입력하기 위한 최소 입력 수가 궁금해졌다.

현재 메시지 MM은 빈 문자열로 시작하며, 매 입력은 다음 두 행동 중 하나이다.

  • MM에 문자 cc를 추가한다. 위 조건에 따라 메시지가 "두 배" 될 수 있다.
  • MM의 마지막 글자를 삭제한다. 단, MM이 빈 문자열이 아닐 때에만 이 행동을 선택할 수 있다.

현재 메시지 MM을 TT로 만드는 데 필요한 최소 입력 수를 구밍이를 대신해 구해 보자.

입력

첫 줄에 DD의 크기 NN이 주어진다. (1≤N≤676=2621 \le N \le 676 = 26^2)

둘째 줄에 길이 NN의 영어 소문자 문자열 SS, 셋째 줄에 길이 NN의 영어 소문자 문자열 CC가 주어진다.

SS의 ii번째 글자를 SiS_i, CC의 ii번째 글자를 CiC_i라고 하면, D={(Si,Ci):1≤i≤N}D = \{(S_i, C_i) : 1 \le i \le N\}이다.

∣D∣=N|D| = N이다. 즉, 같은 (Si,Ci)(S_i, C_i) 쌍은 주어지지 않는다.

넷째 줄에 입력할 영어 소문자로 이루어진 문자열 TT가 주어진다. (1≤∣T∣≤500 0001 \le |T| \le 500\,000)

출력

첫 줄에 현재 메시지를 TT로 만드는 데 필요한 최소 입력 수를 출력한다.

현재 메시지를 TT로 만들 수 없다면 −1-1을 출력한다.

예제3

  1. 예제 1

    입력
    1
    t
    a
    chatchata
    
    예상 출력
    5
    
  2. 예제 2

    입력
    2
    ct
    ha
    chatchata
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    2
    af
    bd
    aafaaafaafaaafd
    
    예상 출력
    8