프로젝트 팀 휴가 일정

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

문제

mm명으로 이루어진 팀이 연속된 nn일의 근무일 동안 프로젝트를 진행한다. 근무일에는 1번부터 nn번까지 번호를 붙인다. 팀원들의 휴가 일정을 짜는 것이 목표다.

팀원은 각자 nn일의 근무일 중 최소 pp일, 최대 pp'일을 근무한다. i=1,,ni = 1, \dots, n에 대해 ii번째 근무일에 근무하는 팀원 수는 qiq_i명 이상 qiq_i'명 이하여야 한다.

팀원은 각자 휴가 계획 목록

(d1,[r1,r1]),(d2,[r2,r2]),,(dk,[rk,rk])(d_1, [r_1, r_1']), (d_2, [r_2, r_2']), \dots, (d_k, [r_k, r_k'])

을 제출한다. 계획 (dt,[rt,rt])(d_t, [r_t, r_t'])는 근무일 rt,rt+1,,rtr_t, r_t + 1, \dots, r_t' 중 최소 dtd_t일을 휴가로 쓰겠다는 뜻이다. 또 팀원은 이 기간들의 합집합 t=1k{r:rtrrt}\bigcup_{t=1}^{k}\{r : r_t \le r \le r_t'\}에 속하지 않는 날에는 근무하려 하므로, 목록에 없는 날에는 휴가를 쓰지 않는다.

휴가 계획은 어느 날을 쉬는지까지 정하지 않는다. 계획이 (2,[7,9])(2, [7, 9])인 팀원은 {7,8}\{7, 8\}, {7,9}\{7, 9\}, {8,9}\{8, 9\} 중 어느 이틀을 쉬어도 되고, 사흘 {7,8,9}\{7, 8, 9\}을 모두 쉴 수도 있다. (2,[3,4])(2, [3, 4])처럼 쉬는 날이 하나로 정해지는 계획도 있다.

위 조건을 모두 만족하도록 팀원 전원에게 휴가 날짜를 배정한 것을 휴가 일정이라고 한다. 팀원에는 1번부터 mm번까지 번호가 붙어 있다. 휴가 일정이 존재하는지 판정하고, 존재하면 하나를 출력하라.

입력

표준 입력으로 읽는다. 첫 줄에 양의 정수 mm, nn, pp, pp'가 주어진다. m100m \le 100, n100n \le 100, ppnp \le p' \le n이다.

다음 nn개 줄에는 i=1i = 1부터 nn까지 두 양의 정수 qiq_iqiq_i'가 주어진다. qiqimq_i \le q_i' \le m이다.

다음 mm개 줄에는 팀원 한 명의 휴가 계획이 주어지며, 그중 jj번째 줄이 jj번 팀원의 계획이다. 계획 (d1,[r1,r1]),,(dk,[rk,rk])(d_1, [r_1, r_1']), \dots, (d_k, [r_k, r_k'])3k+13k + 1개의 양의 정수 k,d1,r1,r1,d2,r2,r2,,dk,rk,rkk, d_1, r_1, r_1', d_2, r_2, r_2', \dots, d_k, r_k, r_k'로 나타낸다. 한 팀원의 휴가 계획은 20개 이하다. 모든 tt에 대해 rtrtnr_t \le r_t' \le n이고 dtrtrt+1d_t \le r_t' - r_t + 1이다. 또 r1<r2<<rkr_1 < r_2 < \dots < r_k이고, aba \ne b이면 기간 [ra,ra][r_a, r_a'][rb,rb][r_b, r_b']는 겹치는 근무일이 없다.

출력

표준 출력으로 쓴다. 첫 줄에는 모든 조건을 만족하는 휴가 일정이 존재하면 1, 존재하지 않으면 -1을 출력한다.

첫 줄이 1인 경우에만 mm개 줄을 더 출력한다. 그중 jj번째 줄에는 jj번 팀원의 휴가 일정을 휴가 일수와 휴가 날짜를 오름차순으로 이어서 출력한다.

조건을 만족하는 휴가 일정이 여러 개일 수 있다. 그런 경우 다음 기준으로 사전순 최소인 일정을 출력한다. 휴가 일정을 mmnn열 표로 적고, jjii열의 값은 jj번 팀원이 ii번째 날에 근무하면 0, 휴가면 1로 둔다. 이 표를 1번 팀원부터 행 단위로, 한 행 안에서는 1번째 날부터 읽어 0과 1의 수열을 만든다. 가능한 휴가 일정 가운데 이 수열이 사전순으로 가장 작은 것을 출력한다.

같은 규칙을 절차로 쓰면 이렇다. 팀원을 1번부터 mm번까지 차례로 보고, 각 팀원에 대해 날짜를 1번째부터 nn번째까지 차례로 본다. 지금까지 정한 결정을 모두 유지하면서 그 팀원이 그 날 근무하는 유효한 휴가 일정이 하나라도 있으면 근무로 정하고, 없으면 그 날을 휴가로 정한다.