알고리즘 가속

아직 제출이 없습니다시간 제한8초메모리 제한128 MB

문제

바이트아사르(Byteasar)는 벌로, 두 양의 정수 수열 x=(x1,,xn)x = (x_1, \dots, x_n)y=(y1,,ym)y = (y_1, \dots, y_m) 에 대해 정의된 불(boolean) 함수 F(x,y)F(x, y) 를 계산해야 한다. 함수는 다음과 같이 정의된다.

boolean F(x, y)
    if W(x) != W(y):              return 0
    else if |W(x)| = |W(y)| = 1:  return 1
    else:                         return F(p(x), p(y)) AND F(s(x), s(y))

여기서 각 기호의 뜻은 다음과 같다.

  • W(x)W(x) 는 수열 xx 에 나타나는 값들의 집합이다. (원소의 순서와 중복은 무시한다.)
  • p(x)p(x)W(p(x))W(x)W(p(x)) \neq W(x) 를 만족하는 xx 의 가장 긴 접두사(앞에서부터 잘라낸 임의 길이의 부분)이다.
  • s(x)s(x)W(s(x))W(x)W(s(x)) \neq W(x) 를 만족하는 xx 의 가장 긴 접미사(뒤에서부터 잘라낸 임의 길이의 부분)이다.
  • \land 는 논리곱(AND), 11 은 참, 00 은 거짓, z|z| 는 집합 zz 의 원소 개수를 뜻한다.

예를 들어 x=(2,3,7,2,7,4,7,2,4)x = (2, 3, 7, 2, 7, 4, 7, 2, 4) 이면 W(x)={2,3,4,7}W(x) = \{2, 3, 4, 7\}, p(x)=(2,3,7,2,7)p(x) = (2, 3, 7, 2, 7), s(x)=(7,2,7,4,7,2,4)s(x) = (7, 2, 7, 4, 7, 2, 4) 이다.

정의를 그대로 따라 FF 를 계산하면 큰 입력에서는 터무니없이 느리므로, 최대한 빠르게 계산해야 한다. 여러 개의 수열 쌍 (x,y)(x, y) 를 읽어, 각 쌍에 대한 F(x,y)F(x, y) 의 값을 출력하여라.

입력

첫째 줄에 분석할 수열 쌍의 개수 kk (1k131 \le k \le 13) 가 주어진다. 이어지는 3k3k 개의 줄에 각 쌍의 정보가 주어진다. 각 쌍마다 첫째 줄에는 두 수열 xxyy 의 길이 nnmm (1n,m100,0001 \le n, m \le 100{,}000) 이 공백으로 구분되어 주어진다. 둘째 줄에는 수열 xx 를 이루는 nn 개의 정수 xix_i (1xi1001 \le x_i \le 100) 가, 셋째 줄에는 수열 yy 를 이루는 mm 개의 정수 yiy_i (1yi1001 \le y_i \le 100) 가 각각 공백으로 구분되어 주어진다.

출력

정확히 kk 개의 줄을 출력한다. ii 번째 줄 (1ik1 \le i \le k) 에는 ii 번째 쌍에 대한 F(x,y)F(x, y) 의 값인 00 또는 11 을 출력한다.