트리
시간 제한1초메모리 제한256 MB
N과 K가 주어질 때 루트가 아닌 모든 내부 노드가 정확히 K개의 자식을 갖는 루트 트리를 만들고, 불가능하면 No를 출력하며, 공백이 숫자보다 작은 사전순으로 가장 작은 간선 목록 문자열을 출력한다.
문제
Vasya는 그래프 이론을 깊이 파고들었다. 트리에 관한 장을 읽던 중 한 가지 문제가 계속 마음에 걸렸다. 리프 노드를 제외한 모든 노드가 정확히 개의 자식을 갖는, 개의 노드로 이루어진 루트 있는 트리를 만들어야 한다. 답은 간선 목록으로 출력해야 하며, 가능한 모든 경우 중 사전순으로 가장 작은 것을 찾아야 한다.
간선 목록은 다음과 같은 방식으로 문자열로 만든다. 각 간선은 두 정수의 쌍, 즉 그 간선이 잇는 두 노드의 번호로 나타낸다. 두 수는 앞에 불필요한 0을 붙이지 않고 적으며, 두 수 사이에는 정확히 공백 문자 하나를 둔다. 문자열은 그래프의 개 간선을 모두 이어서 적고, 각 간선 사이에 공백 문자 하나를 둔 것이다. 모든 노드에는 부터 까지 번호가 붙어 있고, 루트는 번이다.
Vasya는 이런 방식으로 만들 수 있는, 요구 조건을 만족하는 루트 있는 트리의 문자열 중 사전순으로 가장 작은 것을 찾아야 한다. 사전순 비교에서 공백 문자는 모든 숫자보다 작다고 본다.
예를 들어 개의 노드로 이루어지고 리프가 아닌 모든 노드가 개의 자식을 갖는 트리를 만들어 보자. 간선이 인 트리는 조건을 만족한다. 이 트리의 간선 목록은 여러 가지 문자열로 적을 수 있다.
4 2 4 3 1 4 1 52 4 3 4 1 4 1 51 4 1 5 2 4 3 4
여기서 각 문자열은 앞의 것보다 작지만, 어느 것도 최적이 아니다. 이 과 에 대해 사전순으로 가장 작은 문자열 1 2 1 3 2 4 2 5는 다른 트리에서 나온다.
Vasya가 이 문제를 풀도록 도와주자. 곧 그래프 이론 시험이 있다!
입력
입력 파일의 첫째 줄에 두 정수 과 가 주어진다. 은 만들려는 트리의 노드 수이고, 는 리프가 아닌 노드의 자식 수이다. (, )
출력
주어진 조건을 만족하는 트리가 존재하지 않으면 출력 파일의 유일한 줄에 No를 출력한다.
그렇지 않으면 출력 파일의 첫째 줄에 Yes를 출력하고, 둘째 줄에 요구되는 사전순 최소 문자열을 출력한다.