라우터 6
시간 제한2초메모리 제한512 MB
주어진 연결 수와 전력 한도 안에서 N개의 입력을 N개의 출력에 연결하는 수집기, 허브, 분배기 계층 구조의 라우터를 구성합니다.
문제
헨리와 헤티는 네트워크 회사에 입사했고, 첫 프로젝트로 라우터 Connect Ethernet Operating Interface 2016을 만든다. 라우터는 다음으로 구성된다.
- 입력 노드 개, 번호는 번부터 번까지
- 출력 노드 개, 번호는 번부터 번까지
- 내부 노드 개, 번호는 번부터 번까지
- 서로 다른 두 노드를 잇는 단방향 직접 연결 개
노드 가 노드 로 데이터를 보낼 수 있다는 말은 가 에서 데이터를 받을 수 있다는 말과 같고, 다음 중 하나가 성립한다는 뜻이다. 이거나, 가 데이터를 보낼 수 있는 노드 가 있고 에서 로 가는 직접 연결이 있다.
가 로 데이터를 보낼 수 있고 일 때, 에서 로 가는 데이터 경로는 , , 를 만족하는 직접 연결의 집합 이다.
라우터는 다음 다섯 조건을 모두 만족할 때 제대로 동작한다.
- 모든 입력 노드가 모든 출력 노드로 데이터를 보낼 수 있다
- 모든 입력 노드는 자기 자신에서만 데이터를 받을 수 있다
- 모든 출력 노드는 자기 자신으로만 데이터를 보낼 수 있다
- 인 두 노드에서 가 로 데이터를 보낼 수 있으면 는 로 데이터를 보낼 수 없다
- 인 두 노드에서 가 로 데이터를 보낼 수 있으면 에서 로 가는 데이터 경로가 유일하다. 특히 두 노드를 잇는 직접 연결은 최대 한 개다
노드 를 돌리는 데 드는 전력은 이다. 는 로 데이터를 보낼 수 있는 입력 노드의 개수, 는 에서 데이터를 받을 수 있는 출력 노드의 개수다. 라우터가 쓰는 최대 전력은 다.
제대로 동작하는 라우터를 만들어라. 입력 노드와 출력 노드가 각각 정확히 개여야 하고, 직접 연결은 개 이하여야 하며, 이어야 하고, 전체 노드 수는 이어야 한다.
이 조건을 만족하는 라우터는 여러 개여서 출력 항목에서 그중 하나를 정해 두었다. 그 라우터를 출력하면 된다.
입력
한 줄에 정수 , , 이 주어진다. 차례대로 입력 노드의 개수, 허용되는 직접 연결의 최대 개수, 허용되는 최대 전력이다. 출력 노드의 개수도 과 같다.
, , 이다. 모든 입력 노드 는 , 이므로 답이 존재하려면 이어야 한다.
모든 테스트 데이터에서 출력 항목이 정한 라우터의 직접 연결 개수는 개 이하다.
출력
아래 규칙으로 만든 라우터를 출력한다. 이 라우터는 제대로 동작하고 최대 전력이 이하다.
먼저
로 둔다.
입력 노드를 연속한 개씩 묶어 개의 그룹으로 자른다. 입력 그룹 는 입력 노드 번부터 번까지를 담으므로 마지막 그룹은 다른 그룹보다 작을 수 있다. 출력 노드도 같은 방식으로 자른다. 출력 그룹 는 출력 노드 번부터 번까지를 담는다.
그룹 번호 부터 까지를 연속한 개씩 묶어 개의 블록으로 자른다. 블록 는 그룹 번호 부터 까지를 담고, 그룹 는 블록 에 속한다. 입력 쪽과 출력 쪽은 같은 블록 구분을 쓴다.
내부 노드는 개이고 다음 순서로 번호를 붙인다.
- 입력 그룹마다 모으는 노드 하나. 번 노드가 입력 그룹 의 모으는 노드다
- 블록 쌍마다 중계 노드 하나. 번 노드가 (입력 블록 , 출력 블록 ) 쌍의 중계 노드다
- 출력 그룹마다 나누는 노드 하나. 번 노드가 출력 그룹 의 나누는 노드다
직접 연결은 다음 순서로 출력한다.
- 입력 그룹 를 번호가 커지는 순서로, 그 그룹에 속한 입력 노드 를 번호가 커지는 순서로 보면서, 에서 그룹 의 모으는 노드로 가는 연결
- 입력 그룹 를 번호가 커지는 순서로, 출력 블록 을 번호가 커지는 순서로 보면서, 그룹 의 모으는 노드에서 (그룹 가 속한 블록, 블록 ) 쌍의 중계 노드로 가는 연결
- 출력 그룹 를 번호가 커지는 순서로, 입력 블록 를 번호가 커지는 순서로 보면서, (블록 , 그룹 가 속한 블록) 쌍의 중계 노드에서 그룹 의 나누는 노드로 가는 연결
- 출력 그룹 를 번호가 커지는 순서로, 그 그룹에 속한 출력 노드 를 번호가 커지는 순서로 보면서, 그룹 의 나누는 노드에서 로 가는 연결
이 라우터는 , 다.
첫째 줄에 과 을 공백으로 구분해 출력한다. 다음 개의 줄에는 직접 연결 하나마다 두 정수 와 를 공백으로 구분해 출력한다. 노드 에서 노드 로 가는 직접 연결을 뜻하고, 순서는 위에서 정한 대로다.