회전과 재작성
시간 제한15초메모리 제한128 MB
회전과 부분 문자열 축소 규칙으로 두 수열을 같은 수열로 바꿀 때 가능한 가장 긴 길이를 구합니다.
문제
정수 수열 두 개와 재작성 규칙 여러 개가 주어진다. 수열 A는 이고 수열 B는 이며, 각 규칙은 꼴이다. 두 수열에는 아래 두 변환을 원하는 순서로 원하는 횟수만큼 적용할 수 있고, 두 수열은 서로 독립적으로 변환한다.
- 회전: 수열의 첫 원소를 맨 뒤로 옮긴다. 즉 를 로 바꾼다.
- 재작성: 규칙 를 써서 를 로 바꾼다.
A와 B를 같은 수열로 만들 수 있는지 판정하고, 만들 수 있다면 그렇게 만든 수열의 길이 중 가장 큰 값을 구하라.
입력
입력은 여러 데이터 집합으로 이루어진다. 각 데이터 집합의 형식은 다음과 같다.
n m r
A1 A2 ... An
B1 B2 ... Bm
R1
...
Rr
첫 줄에는 양의 정수 , , 가 주어진다. 은 수열 A의 길이(), 은 수열 B의 길이(), 는 재작성 규칙의 개수()다. 둘째 줄에는 A의 원소 개가, 셋째 줄에는 B의 원소 개가 주어진다. 이어지는 개 줄은 각각 규칙 하나를 다음 형식으로 나타낸다.
k x1 x2 ... xk y
맨 앞의 는 규칙 좌변의 길이이고 이다. 그 뒤에 좌변을 이루는 정수 개 가 오고, 마지막에 우변을 나타내는 정수 가 온다.
, , , 는 모두 1 이상 30 이하다.
0 0 0인 줄이 입력의 끝을 나타낸다.
출력
각 데이터 집합마다 한 줄씩 출력한다. A와 B를 같은 수열로 만들 수 있으면 그렇게 만들 수 있는 수열의 최대 길이를 출력하고, 만들 수 없으면 -1을 출력한다.