프로젝트 팀 휴가 일정
시간 제한1초메모리 제한512 MB
- 난이도
아직 분류되지 않았습니다
- 정답자
- 아직 제출이 없습니다
문제
명으로 이루어진 팀이 연속된 일의 근무일 동안 프로젝트를 진행한다. 근무일에는 1번부터 번까지 번호를 붙인다. 팀원들의 휴가 일정을 짜는 것이 목표다.
팀원은 각자 일의 근무일 중 최소 일, 최대 일을 근무한다. 에 대해 번째 근무일에 근무하는 팀원 수는 명 이상 명 이하여야 한다.
팀원은 각자 휴가 계획 목록
을 제출한다. 계획 는 근무일 중 최소 일을 휴가로 쓰겠다는 뜻이다. 또 팀원은 이 기간들의 합집합 에 속하지 않는 날에는 근무하려 하므로, 목록에 없는 날에는 휴가를 쓰지 않는다.
휴가 계획은 어느 날을 쉬는지까지 정하지 않는다. 계획이 인 팀원은 , , 중 어느 이틀을 쉬어도 되고, 사흘 을 모두 쉴 수도 있다. 처럼 쉬는 날이 하나로 정해지는 계획도 있다.
위 조건을 모두 만족하도록 팀원 전원에게 휴가 날짜를 배정한 것을 휴가 일정이라고 한다. 팀원에는 1번부터 번까지 번호가 붙어 있다. 휴가 일정이 존재하는지 판정하고, 존재하면 하나를 출력하라.
입력
표준 입력으로 읽는다. 첫 줄에 양의 정수 , , , 가 주어진다. , , 이다.
다음 개 줄에는 부터 까지 두 양의 정수 와 가 주어진다. 이다.
다음 개 줄에는 팀원 한 명의 휴가 계획이 주어지며, 그중 번째 줄이 번 팀원의 계획이다. 계획 는 개의 양의 정수 로 나타낸다. 한 팀원의 휴가 계획은 20개 이하다. 모든 에 대해 이고 이다. 또 이고, 이면 기간 와 는 겹치는 근무일이 없다.
출력
표준 출력으로 쓴다. 첫 줄에는 모든 조건을 만족하는 휴가 일정이 존재하면 1, 존재하지 않으면 -1을 출력한다.
첫 줄이 1인 경우에만 개 줄을 더 출력한다. 그중 번째 줄에는 번 팀원의 휴가 일정을 휴가 일수와 휴가 날짜를 오름차순으로 이어서 출력한다.
조건을 만족하는 휴가 일정이 여러 개일 수 있다. 그런 경우 다음 기준으로 사전순 최소인 일정을 출력한다. 휴가 일정을 행 열 표로 적고, 행 열의 값은 번 팀원이 번째 날에 근무하면 0, 휴가면 1로 둔다. 이 표를 1번 팀원부터 행 단위로, 한 행 안에서는 1번째 날부터 읽어 0과 1의 수열을 만든다. 가능한 휴가 일정 가운데 이 수열이 사전순으로 가장 작은 것을 출력한다.
같은 규칙을 절차로 쓰면 이렇다. 팀원을 1번부터 번까지 차례로 보고, 각 팀원에 대해 날짜를 1번째부터 번째까지 차례로 본다. 지금까지 정한 결정을 모두 유지하면서 그 팀원이 그 날 근무하는 유효한 휴가 일정이 하나라도 있으면 근무로 정하고, 없으면 그 날을 휴가로 정한다.