아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

트리

시간 제한1초메모리 제한256 MB

요약
N과 K가 주어질 때 루트가 아닌 모든 내부 노드가 정확히 K개의 자식을 갖는 루트 트리를 만들고, 불가능하면 No를 출력하며, 공백이 숫자보다 작은 사전순으로 가장 작은 간선 목록 문자열을 출력한다.
난이도

보통10점 중 7점

유형
트리, 그리디, 구현, 수학
정답자
아직 제출이 없습니다

문제

Vasya는 그래프 이론을 깊이 파고들었다. 트리에 관한 장을 읽던 중 한 가지 문제가 계속 마음에 걸렸다. 리프 노드를 제외한 모든 노드가 정확히 KK개의 자식을 갖는, NN개의 노드로 이루어진 루트 있는 트리를 만들어야 한다. 답은 간선 목록으로 출력해야 하며, 가능한 모든 경우 중 사전순으로 가장 작은 것을 찾아야 한다.

간선 목록은 다음과 같은 방식으로 문자열로 만든다. 각 간선은 두 정수의 쌍, 즉 그 간선이 잇는 두 노드의 번호로 나타낸다. 두 수는 앞에 불필요한 0을 붙이지 않고 적으며, 두 수 사이에는 정확히 공백 문자 하나를 둔다. 문자열은 그래프의 N−1N-1개 간선을 모두 이어서 적고, 각 간선 사이에 공백 문자 하나를 둔 것이다. 모든 노드에는 11부터 NN까지 번호가 붙어 있고, 루트는 11번이다.

Vasya는 이런 방식으로 만들 수 있는, 요구 조건을 만족하는 루트 있는 트리의 문자열 중 사전순으로 가장 작은 것을 찾아야 한다. 사전순 비교에서 공백 문자는 모든 숫자보다 작다고 본다.

예를 들어 55개의 노드로 이루어지고 리프가 아닌 모든 노드가 22개의 자식을 갖는 트리를 만들어 보자. 간선이 (1,4),(1,5),(4,3),(4,2)(1, 4), (1, 5), (4, 3), (4, 2)인 트리는 조건을 만족한다. 이 트리의 간선 목록은 여러 가지 문자열로 적을 수 있다.

  • 4 2 4 3 1 4 1 5
  • 2 4 3 4 1 4 1 5
  • 1 4 1 5 2 4 3 4

여기서 각 문자열은 앞의 것보다 작지만, 어느 것도 최적이 아니다. 이 NN과 KK에 대해 사전순으로 가장 작은 문자열 1 2 1 3 2 4 2 5는 다른 트리에서 나온다.

Vasya가 이 문제를 풀도록 도와주자. 곧 그래프 이론 시험이 있다!

입력

입력 파일의 첫째 줄에 두 정수 NN과 KK가 주어진다. NN은 만들려는 트리의 노드 수이고, KK는 리프가 아닌 노드의 자식 수이다. (2≤N≤1052 \le N \le 10^5, 1≤K≤1051 \le K \le 10^5)

출력

주어진 조건을 만족하는 트리가 존재하지 않으면 출력 파일의 유일한 줄에 No를 출력한다.

그렇지 않으면 출력 파일의 첫째 줄에 Yes를 출력하고, 둘째 줄에 요구되는 사전순 최소 문자열을 출력한다.

예제2

  1. 예제 1

    입력
    5 2
    
    예상 출력
    Yes
    1 2 1 3 2 4 2 5
    
  2. 예제 2

    입력
    4 10
    
    예상 출력
    No