베라의 등산로 만들기
시간 제한1초메모리 제한512 MB
K를 주어진 탐욕적 분해 규칙에 따라 블록으로 나누고, 두 변소 경로가 정확히 K개인 연결된 트레일 네트워크를 출력한다.
문제
등산을 좋아하는 베라가 자기만의 등산로 망을 만들려고 한다. 이 망에는 번부터 번까지 번호가 붙은 장소 개와 양방향 등산로 개가 있고, 번 등산로는 서로 다른 두 장소 와 를 직접 잇는다. 망은 연결되어 있어야 하므로 어느 두 장소 사이든 등산로를 따라 오갈 수 있어야 한다. 같은 두 장소를 직접 잇는 등산로가 여러 개 있어도 된다.
인 두 장소 와 는, 같은 등산로를 두 번 넘게 지나지 않으면서 에서 까지 갔다가 다시 로 돌아올 수 있으면 아름답게 연결된 쌍이 된다. 베라는 아름답게 연결된 쌍이 정확히 개인 망을 아름다운 망이라고 부른다.
망이 너무 커지면 안 되므로 을 만족해야 한다.
거의 모든 에 대해 아름다운 망은 여러 가지가 있으므로, 이 문제는 그중 하나를 정해서 묻는다. 어떤 망을 출력해야 하는지는 출력 단락에 정확히 적혀 있다.
입력
첫째 줄에 정수 가 주어진다. ()
출력
아래 규칙대로 망을 만들어 출력한다. 다른 답은 인정하지 않는다.
먼저 를 블록으로 나눈다. 빈 목록에서 시작해 인 동안 다음을 반복한다. 이면서 인 가장 큰 정수 을 골라 목록 뒤에 붙이고, 를 로 바꾼다. 이렇게 얻은 목록을 라 하고 로 둔다.
장소에 번부터 번까지 번호를 붙이고 각 블록에 연속한 번호 구간을 준다. 블록 은 번부터 번까지, 블록 는 그다음 개를 차지하는 식이다. 블록 의 첫 장소를 , 마지막 장소를 라고 하자.
출력의 첫째 줄에는 와 을 공백 하나로 구분해 출력한다. 이어지는 개의 줄에는 등산로 하나의 두 장소를 공백 하나로 구분해, 아래에 적힌 순서대로 출력한다.
순서로 블록 의 등산로를 출력한다.
- 이면 " " 줄을 두 번 출력한다.
- 이면 등산로 , , ... , 와 마지막으로 까지 개를 한 줄에 하나씩, 각 줄에 앞쪽 장소를 먼저 적어 출력한다.
블록 개의 등산로를 모두 출력한 다음, 블록을 잇는 등산로 개를 출력한다. 순서로 " " 줄을 출력하면 된다.
이 망은 연결되어 있고, 아름답게 연결된 쌍이 정확히 개이며, 입력으로 가능한 모든 에 대해 과 를 만족한다.
힌트
첫 번째 예제는 라서 블록이 , 로 나뉜다. 장소 과 를 등산로 두 개가 잇고, 장소 과 를 등산로 두 개가 이으며, 장소 와 사이의 등산로가 두 블록을 연결한다. 아름답게 연결된 쌍은 와 두 개다.
두 번째 예제는 이라서 블록이 하나뿐이고, 망은 장소 네 개로 이루어진 사이클이 된다. 장소 쌍 여섯 개가 모두 아름답게 연결된 쌍이다.