#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int t, next;
  Edge() {}
  Edge(int a, int b) : t(a), next(b) {}
};
Edge e[400005];
int head[200005], ans[200005];
bool vis[200005];
int dep[200005], fa[200005];
int dfs1(int x) {
  int id = x;
  for (int i = head[x]; i; i = e[i].next)
    if (e[i].t != fa[x]) {
      int u = e[i].t;
      dep[u] = dep[x] + 1;
      fa[u] = x;
      int t = dfs1(u);
      if (dep[t] > dep[id]) id = t;
    }
  return id;
}
int dfs2(int x, int v, int k) {
  int s = dep[x];
  for (int i = head[x]; i; i = e[i].next)
    if (e[i].t != fa[x] && !vis[e[i].t]) {
      int u = e[i].t;
      dep[u] = dep[x] + 1;
      fa[u] = x;
      ans[u] = (ans[x] + v + k) % k;
      s = max(s, dfs2(u, v, k));
    }
  return s;
}
int num[200005];
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    e[2 * i - 1] = Edge(y, head[x]);
    head[x] = 2 * i - 1;
    e[2 * i] = Edge(x, head[y]);
    head[y] = 2 * i;
  }
  dep[1] = fa[1] = 0;
  int u = dfs1(1);
  dep[u] = fa[u] = 0;
  int v = dfs1(u), cnt = 0;
  for (int i = v, last2 = 0; i; last2 = i, i = fa[i]) {
    num[++cnt] = i;
    vis[i] = 1;
    ans[i] = (ans[last2] + 1) % k;
  }
  for (int i = 1; i <= cnt; i++) {
    int x = num[i];
    dep[x] = fa[x] = 0;
    int t = dfs2(x, (i <= (cnt >> 1)) ? -1 : 1, k);
    if (t && t + min(i, cnt - i + 1) >= k && k > 2) {
      puts("No");
      return 0;
    }
  }
  puts("Yes");
  for (int i = 1; i <= n; i++) printf("%d ", ans[i] + 1);
  printf("\n");
  return 0;
}
