만드는 중입니다

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

StrCartesian

시간 제한13초메모리 제한2048 MB

요약
두 문자열 집합 A와 B가 주어집니다. 모든 a_i + b_j를 사전순으로 정렬했을 때 질의된 위치 k_i에 있는 문자열의 인덱스 (f, s)를 구합니다.
난이도

어려움10점 중 9점

유형
문자열, 트라이, 정렬, 이분 탐색
정답자
아직 제출이 없습니다

문제

두 문자열 집합 A={a1,a2,…,an}A = \{a_1, a_2, \ldots, a_n\}과 B={b1,b2,…,bm}B = \{b_1, b_2, \ldots, b_m\}이 주어진다. aia_i와 bjb_j를 이어 붙인 문자열 n⋅mn \cdot m개로 이루어진 수열을 다음과 같이 정의한다.

S=(a1b1,a1b2,…,a1bm,a2b1,a2b2,…,a2bm,…,anb1,anb2,…,anbm)S=(a_1 b_1, a_1 b_2, \ldots, a_1 b_m, a_2 b_1, a_2 b_2, \ldots, a_2 b_m, \ldots, a_n b_1, a_n b_2, \ldots, a_n b_m)

수열 SS를 사전순으로 정렬하고, 정렬된 수열을 C=(c1,c2,…,cn⋅m)C = (c_1, c_2, \ldots, c_{n \cdot m})라 하자.

CC 전체는 너무 커서 출력할 수 없으므로 qq개의 질의가 주어진다. ii번째 질의는 ckic_{k_i}를 묻는다. 이 문자열도 너무 길어서 출력하기 어렵다. 답이 c=af+bsc = a_f + b_s이면, 프로그램은 (f,s)(f, s) 쌍만 출력하면 된다.

입력

첫 줄에 정수 nn과 mm (1≤n,m≤5⋅1041 \le n, m \le 5 \cdot 10^4)이 주어진다. 이는 집합 AA와 BB의 크기이다. 다음 nn개의 줄에는 서로 다른 빈 문자열이 아닌 문자열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 집합 AA에 속한 문자열의 총 길이는 10610^6을 넘지 않는다. 다음 mm개의 줄에는 서로 다른 빈 문자열이 아닌 문자열 b1,b2,…,bmb_1, b_2, \ldots, b_m이 주어진다. 집합 BB에 속한 문자열의 총 길이는 10610^6을 넘지 않는다. 모든 문자열은 영어 소문자로만 이루어진다. 다음 줄에는 질의의 개수 qq (1≤q≤10001 \le q \le 1000)가 주어진다. 이어서 qq개의 줄에 각각 정수 kik_i (1≤ki≤n⋅m1 \le k_i \le n \cdot m)가 주어진다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 두 정수 fif_i와 sis_i (1≤fi≤n1 \le f_i \le n, 1≤si≤m1 \le s_i \le m)를 출력한다. 이는 ckic_{k_i}가 afibsia_{f_i} b_{s_i}와 같다는 뜻이다. 정답이 여러 개이면 그중 아무거나 출력해도 된다.

예제1

  1. 예제 1

    입력
    2 3
    a
    ab
    a
    aa
    ba
    2
    3
    4
    
    예상 출력
    2 1
    1 3