라우터 4
시간 제한2초메모리 제한512 MB
N개의 입력, r개의 병합 노드, r개의 분할 노드, N개의 출력으로 이루어진 고정 라우터를 M = 2N + r^2개의 연결로 출력한다.
문제
헨리와 헤티는 네트워크 장비 회사에 막 입사했고, 첫 프로젝트로 새 라우터 Connect Ethernet Operating Interface 2016을 만든다. 라우터는 다음으로 이루어진다.
- 입력 노드 개, 번호는 번부터 번까지
- 출력 노드 개, 번호는 번부터 번까지
- 내부 노드 개, 번호는 번부터 번까지
- 서로 다른 두 노드를 잇는 단방향 직접 연결 개
노드 가 노드 로 데이터를 보낼 수 있다는 말은(가 에서 데이터를 받을 수 있다는 말과 같다) 이거나, 가 데이터를 보낼 수 있는 노드 가 존재하고 에서 로 가는 직접 연결이 있다는 뜻이다.
가 로 데이터를 보낼 수 있고 일 때, 에서 로 가는 데이터 경로는 , , 를 만족하는 직접 연결의 집합 이다.
다음을 모두 만족하면 라우터가 제대로 동작한다.
- 모든 입력 노드는 모든 출력 노드로 데이터를 보낼 수 있다.
- 입력 노드는 자기 자신에서만 데이터를 받는다.
- 출력 노드는 자기 자신으로만 데이터를 보낸다.
- 이고 가 로 데이터를 보낼 수 있으면, 는 로 데이터를 보낼 수 없다.
- 이고 가 로 데이터를 보낼 수 있으면, 에서 로 가는 데이터 경로가 유일하다. 특히 두 노드 사이의 직접 연결은 많아야 하나다.
라우터도 전기가 있어야 동작한다. 노드 를 켜는 데 드는 전력은 이고, 는 로 데이터를 보낼 수 있는 입력 노드의 개수, 는 에서 데이터를 받을 수 있는 출력 노드의 개수다. 라우터가 쓰는 최대 전력은 다.
프로젝트 관리자는 명세 , , 을 건네면서 입력 노드와 출력 노드가 정확히 개씩이고, 직접 연결을 많아야 개 쓰고, 가 이하이며, 전체 노드가 개 이하()인 라우터를 요구한다. 관리자가 실제로 건넨 명세는 , , 이다.
명세 하나를 만족하는 라우터는 여러 가지다. 그래서 이 문제에서는 출력에 적힌 라우터 하나만 만든다.
입력
첫째 줄에 정수 , , 이 주어진다. 은 입력 노드의 개수이자 출력 노드의 개수, 은 쓸 수 있는 직접 연결의 최대 개수, 은 허용되는 최대 전력이다.
출력에서 정의한 과 에 대해 과 이 항상 성립한다.
출력
아래에 적힌 라우터를 그대로 만든다. , 이라고 하자.
내부 노드는 개이므로 이다. 번부터 번까지는 모음 노드, 번부터 번까지는 분배 노드다. 입력 노드 는 입력 그룹 에 속하고, 출력 노드 는 출력 그룹 에 속한다. 한 그룹의 크기는 많아야 다.
직접 연결은 개다.
- 부터 까지의 모든 에 대해, 입력 노드 에서 모음 노드 로 가는 연결
- 부터 까지의 모든 와 부터 까지의 모든 에 대해, 모음 노드 에서 분배 노드 로 가는 연결
- 부터 까지의 모든 에 대해, 분배 노드 에서 출력 노드 로 가는 연결
첫째 줄에 과 을 공백 하나로 구분해 출력한다. 다음 개의 줄에는 연결을 한 줄에 하나씩 출력하는데, 노드 에서 노드 로 가는 직접 연결이 있다는 뜻으로 정수 와 를 출력한다. 순서는 가 커지는 순의 입력 연결, 그다음 가 커지는 순이고 가 같으면 가 커지는 순의 내부 연결, 마지막으로 가 커지는 순의 출력 연결이다.