만드는 중입니다

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

입력을 섞기만 하면 된다

면접 대비

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

요약
순열 p로 t를 섞는 연산을 최소 몇 번 적용해야 t가 s의 부분 문자열이 되는지 구합니다. 만들 수 없으면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
문자열 매칭, 문자열, 해시맵
정답자
아직 제출이 없습니다

문제

크기가 nn인 순열 pp는 11부터 nn까지의 서로 다른 nn개의 수로 이루어진 수열이다. p(i)p(i)는 ii번째 원소를 뜻한다. pk(i)p^k(i)는 pp를 kk번 적용한 값, 즉 p(p(…p(i)…))p(p(\ldots p(i)\ldots))를 뜻한다. 순열이 사이클이라는 것은 pk(1)=1p^k(1)=1을 만족하는 가장 작은 양의 정수 kk가 nn과 같다는 뜻이다.

길이가 nn인 문자열 ss, 길이가 mm인 문자열 tt, 크기가 mm인 사이클 순열 pp가 주어진다. tt를 ss의 부분 문자열로 만들려고 한다. 이를 위해 셔플 연산을 0번 이상 적용할 수 있다. 셔플 연산은 tt를 t′t'로 바꾸며, 모든 ii (1≤i≤m1 \le i \le m)에 대해 tt의 ii번째 글자가 t′t'의 p(i)p(i)번째 글자와 같아야 한다.

문자열 aa가 ss의 부분 문자열이라는 것은 1≤l≤∣s∣−∣a∣+11 \le l \le |s|-|a|+1을 만족하는 ll이 존재하여, 모든 ii (1≤i≤∣a∣1 \le i \le |a|)에 대해 sl+i−1=ais_{l+i-1}=a_i가 성립한다는 뜻이다.

tt로부터 ss의 부분 문자열을 얻을 수 있는지 판단하라. 얻을 수 있다면 필요한 셔플 연산 횟수의 최솟값을 구하라.

입력

첫째 줄에 두 정수 nn과 mm (1≤m≤n≤2000001 \le m \le n \le 200000)이 주어진다. 둘째 줄에는 적용할 수 있는 순열 p(1),…,p(m)p(1), \ldots, p(m)이 mm개의 정수로 주어진다. 다음 두 줄에는 길이 nn인 문자열 ss와 길이 mm인 문자열 tt가 각각 주어진다. 두 문자열은 모두 영어 소문자로만 이루어져 있다. 입력으로 주어지는 순열은 사이클 순열임이 보장된다.

출력

tt로부터 ss의 부분 문자열을 얻을 수 없으면 −1-1을 출력한다. 얻을 수 있다면 필요한 셔플 연산 횟수의 최솟값을 출력한다.

예제2

  1. 예제 1

    입력
    3 2
    2 1
    aba
    ba
    
    예상 출력
    0
    
  2. 예제 2

    입력
    7 4
    3 4 2 1
    dcabadc
    abcd
    
    예상 출력
    1