베네시 네트워크 라우팅
시간 제한1초메모리 제한128 MB
베네시 네트워크에서 위아래 컴퓨터를 잇는 요구된 순열을 실현하는, 사전순으로 가장 작은 스위치 설정을 구하는 문제입니다.
문제
컴퓨터 클러스터를 위한 상호연결 네트워크를 설계한다. 이 네트워크는 개의 행으로 이루어진 스위치 격자이며, 각 행에는 개의 스위치가 있다. 하나의 스위치에는 두 개의 입력 선 , 와 두 개의 출력 선 , 가 있다. 스위치가 꺼짐 상태이면 입력 는 출력 로, 입력 는 출력 로 전달된다. 켜짐 상태이면 가 에, 가 에 연결된다. 서로 다른 두 출발지의 데이터는 같은 선을 절대 공유할 수 없지만, 두 메시지가 한 스위치의 서로 다른 두 입력을 통해 지나가는 것은 허용된다.
맨 위 행에 개의 컴퓨터가, 맨 아래 행에 개의 컴퓨터가 있으며, 각 행의 컴퓨터는 왼쪽에서 오른쪽으로 부터 까지 번호가 매겨진다. 각 아래 행 컴퓨터가 연결되어야 하는 위 행 컴퓨터가 주어지며, 이 모든 연결이 서로 선을 공유하지 않는 경로로 동시에 이루어지도록 모든 스위치의 상태를 정해야 한다.
네트워크는 베네시(Beneš) 위상을 사용한다. -베네시 네트워크는 스위치 하나이다. 이면 -베네시 네트워크는 다음과 같이 재귀적으로 구성된다.
- 첫(맨 위) 행에는 개의 스위치가 있고, 스위치 ()는 컴퓨터 와 로부터 두 입력을 받는다.
- 첫 행의 출력 선과 둘째 행의 입력 선은 완전 셔플 순열로 연결된다. 즉 어떤 행의 출력 번호 는 다음 행의 입력 번호 에 연결되며, 은 의 비트 이진 표현을 오른쪽으로 한 칸 회전시켜 얻는다. 한 행의 선은 왼쪽에서 오른쪽으로 번호가 매겨진다.
- 이면 둘째 행부터 끝에서 둘째 행까지의 행들이 두 개의 -베네시 부분망을 이루며, 하나는 그 행들의 왼쪽 절반을, 다른 하나는 오른쪽 절반을 차지한다.
- 마지막으로 부분망의 출력에 역 셔플 순열을 적용하고, 개의 스위치로 이루어진 마지막 행을 덧붙인다.
입력
입력에는 여러 개의 테스트 케이스가 있다. 각 테스트 케이스는 정수 ()이 담긴 줄로 시작하며, 이는 연결해야 할 컴퓨터 쌍이 개임을 뜻한다. 인 줄은 입력의 끝을 나타내며 처리하지 않는다.
인 각 줄 다음에는 개의 정수가 담긴 줄이 하나 더 온다. 이 중 번째 정수()는 번째 아래 행 컴퓨터가 통신해야 하는 위 행 컴퓨터이다. 주어지는 데이터에는 항상 유효한 스위치 설정이 최소 하나 존재한다.
출력
각 테스트 케이스에 대해 개의 줄을 출력한다. 각 줄은 길이가 인 이진 문자열로, 각 스위치가 켜짐(1)인지 꺼짐(0)인지를 나타낸다.
가능한 설정이 여러 개이면 사전순으로 가장 작은 것을 출력한다. 즉 맨 위 행의 문자열이 사전순으로 가장 작아야 하고, 같을 경우 둘째 행의 문자열이 사전순으로 가장 작아야 하며, 이런 식으로 계속한다.
연속한 테스트 케이스의 출력 사이는 빈 줄로 구분한다.