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

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

버스 타기

시간 제한2초메모리 제한1024 MB

요약
여러 정류장을 도는 순환 버스 노선들이 있을 때, 각 승객이 정해진 구간을 순서대로 타고 갈아타며 언제 어느 정류장에서 내리는지, 완료할 수 없으면 0 0을 출력하는 시뮬레이션 문제입니다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 구현, 수학, 배열
정답자
아직 제출이 없습니다

문제

어떤 도시에 nn개의 버스 정류장이 있고, 이 정류장들을 지나는 kk개의 순환 버스 노선이 있다. 각 노선은 그 노선이 지나는 정류장 번호의 목록으로 주어지며, ii번째 노선은 정류장 ai,1,ai,2,…,ai,lia_{i,1}, a_{i,2}, \ldots, a_{i,l_i}를 이 순서대로 지난다. 각 노선에는 버스가 정확히 한 대씩 다닌다. 시각 0에 ii번째 버스는 정류장 ai,1a_{i,1}에 있다. 버스가 자기 노선의 다음 정류장까지 가는 데에는 정확히 1분이 걸린다. 정류장에서 버스가 서 있는 시간은 무시할 수 있다. 모든 노선은 순환 노선이므로, 정류장 ai,lia_{i,l_i}를 떠난 지 1분 후 버스는 정류장 ai,1a_{i,1}에 도착하고 노선을 다시 한 바퀴 돈다.

이 도시의 여러 사람이 버스를 타고 놀기로 했다. 각자 자신의 놀이 계획을 세웠다. jj번째 사람의 계획은 놀이를 시작할 정류장 bjb_j와 수열 cj,1,cj,2,…,cj,mjc_{j,1}, c_{j,2}, \ldots, c_{j,m_j}로 이루어진다. 이 수들의 의미는 다음과 같다. 시각 0에 사람은 정류장 bjb_j에 가서 가장 먼저 오는 버스를 기다린다. 만약 그 시각에 어떤 버스가 정류장 bjb_j에 있다면, 사람은 그 버스에 탄다. 이 버스를 타고 cj,1c_{j,1}개의 정류장을 지나간 뒤 내려서, 자신이 있는 정류장에서 다음 버스를 기다린다. 그 버스를 타고 cj,2c_{j,2}개의 정류장을 지나간 뒤 다시 내려서 또 다음 버스를 기다린다. 이런 식으로 계속한다. 만약 어느 순간 정류장에 여러 대의 버스가 동시에 도착한다면, 사람은 노선 번호가 가장 작은 버스에 탄다. 사람이 어떤 정류장에서 버스에서 내리면, 그 정류장에서 1분보다 이른 시각에는 떠날 수 없다.

각 사람에 대해, 시작 시각으로부터 몇 분 후에 어느 정류장에서 그의 놀이가 끝나는지 구하시오.

입력

입력 파일에는 먼저 수 nn, 그 다음 수 kk가 주어진다. 그 다음에는 버스 노선을 나타내는 kk개의 줄이 주어진다. 각 줄은 노선의 길이를 나타내는 수 lil_i로 시작하고, 그 다음에 노선이 지나는 정류장의 목록 ai,1,ai,2,…,ai,lia_{i,1}, a_{i,2}, \ldots, a_{i,l_i}가 이어진다. 노선은 같은 정류장을 여러 번 지날 수 있다.

그 다음에는 사람의 수 pp가 주어지고, 이어서 사람들의 계획을 나타내는 pp개의 줄이 주어진다. 각 줄은 먼저 시작 정류장 번호 bjb_j와 수열의 길이 mjm_j를 포함하고, 그 다음에 수 cj,1,cj,2,…,cj,mjc_{j,1}, c_{j,2}, \ldots, c_{j,m_j}가 이어진다.

입력 파일의 모든 수는 자연수이고 50을 넘지 않는다.

출력

출력 파일에 각 사람에 대해 두 수를 출력한다. 놀이가 끝나는 시각(분)과 그 일이 일어나는 정류장 번호이다. 만약 사람이 자신의 계획을 끝까지 실행할 수 없다면(어떤 정류장에서 버스를 기다려도 오지 않는다면), 그 사람에 대해 두 개의 0을 출력한다.

예제1

  1. 예제 1

    입력
    6 4
    4  1 2 3 5
    2  3 4
    5  5 2 1 3 2
    2  4 3
    3
    1  4  1 2 3 4
    2  1  1
    6  3  1 2 3
    
    예상 출력
    20 1
    2 3
    0 0