아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

회전과 재작성

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

요약
회전과 부분 문자열 축소 규칙으로 두 수열을 같은 수열로 바꿀 때 가능한 가장 긴 길이를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열 매칭, 구간
정답자
아직 제출이 없습니다

문제

정수 수열 두 개와 재작성 규칙 여러 개가 주어진다. 수열 A는 A1,A2,…,AnA_1, A_2, \ldots, A_n이고 수열 B는 B1,B2,…,BmB_1, B_2, \ldots, B_m이며, 각 규칙은 x1,x2,…,xk→yx_1, x_2, \ldots, x_k \to y 꼴이다. 두 수열에는 아래 두 변환을 원하는 순서로 원하는 횟수만큼 적용할 수 있고, 두 수열은 서로 독립적으로 변환한다.

  • 회전: 수열의 첫 원소를 맨 뒤로 옮긴다. 즉 c1,c2,…,cpc_1, c_2, \ldots, c_p를 c2,…,cp,c1c_2, \ldots, c_p, c_1로 바꾼다.
  • 재작성: 규칙 x1,x2,…,xk→yx_1, x_2, \ldots, x_k \to y를 써서 c1,c2,…,ci,x1,x2,…,xk,d1,d2,…,djc_1, c_2, \ldots, c_i, x_1, x_2, \ldots, x_k, d_1, d_2, \ldots, d_j를 c1,c2,…,ci,y,d1,d2,…,djc_1, c_2, \ldots, c_i, y, d_1, d_2, \ldots, d_j로 바꾼다.

A와 B를 같은 수열로 만들 수 있는지 판정하고, 만들 수 있다면 그렇게 만든 수열의 길이 중 가장 큰 값을 구하라.

입력

입력은 여러 데이터 집합으로 이루어진다. 각 데이터 집합의 형식은 다음과 같다.

n m r
A1 A2 ... An
B1 B2 ... Bm
R1
...
Rr

첫 줄에는 양의 정수 nn, mm, rr가 주어진다. nn은 수열 A의 길이(n≤25n \le 25), mm은 수열 B의 길이(m≤25m \le 25), rr는 재작성 규칙의 개수(r≤60r \le 60)다. 둘째 줄에는 A의 원소 nn개가, 셋째 줄에는 B의 원소 mm개가 주어진다. 이어지는 rr개 줄은 각각 규칙 하나를 다음 형식으로 나타낸다.

k x1 x2 ... xk y

맨 앞의 kk는 규칙 좌변의 길이이고 2≤k≤102 \le k \le 10이다. 그 뒤에 좌변을 이루는 정수 kk개 x1,x2,…,xkx_1, x_2, \ldots, x_k가 오고, 마지막에 우변을 나타내는 정수 yy가 온다.

A1,…,AnA_1, \ldots, A_n, B1,…,BmB_1, \ldots, B_m, x1,…,xkx_1, \ldots, x_k, yy는 모두 1 이상 30 이하다.

0 0 0인 줄이 입력의 끝을 나타낸다.

출력

각 데이터 집합마다 한 줄씩 출력한다. A와 B를 같은 수열로 만들 수 있으면 그렇게 만들 수 있는 수열의 최대 길이를 출력하고, 만들 수 없으면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    3 3 3
    1 2 3
    4 5 6
    2 1 2 5
    2 6 4 3
    2 5 3 1
    3 3 2
    1 1 1
    2 2 1
    2 1 1 2
    2 2 2 1
    7 1 2
    1 1 2 1 4 1 2
    4
    3 1 4 1 4
    3 2 4 2 4
    16 14 5
    2 1 2 2 1 3 2 1 3 2 2 1 1 3 1 2
    2 1 3 1 1 2 3 1 2 2 2 2 1 3
    2 3 1 3
    3 2 2 2 1
    3 2 2 1 2
    3 1 2 2 2
    4 2 1 2 2 2
    0 0 0
    
    예상 출력
    2
    -1
    1
    9