#include <bits/stdc++.h>
using namespace std;
inline int read();
const int maxn = 2e5 + 5;
int n, k, c;
int col[maxn], dn[maxn], id[maxn];
int he[maxn], ne[maxn << 1], to[maxn << 1];
struct TRI {
  int x, y, z;
} mx[maxn];
void Add_Edge(int x, int y) {
  ne[++c] = he[x];
  he[x] = c;
  to[c] = y;
  ne[++c] = he[y];
  he[y] = c;
  to[c] = x;
}
void Max(TRI& a, int k, int u, int v) {
  if (a.x <= k)
    a.z = a.y, a.y = a.x, a.x = k, id[u] = v;
  else if (a.y <= k)
    a.z = a.y, a.y = k;
  else if (a.z <= k)
    a.z = k;
}
void Dfs_Up(int p, int f) {
  mx[p] = (TRI){0, 0, 0};
  for (int i = he[p]; i; i = ne[i]) {
    if (to[i] == f) continue;
    Dfs_Up(to[i], p);
    Max(mx[p], mx[to[i]].x + 1, p, to[i]);
  }
  if (!mx[p].x) mx[p].x = 1;
}
void Dfs_Down(int p, int f) {
  for (int i = he[p]; i; i = ne[i]) {
    if (to[i] == f) continue;
    Max(mx[to[i]], id[p] == to[i] ? mx[p].y + 1 : mx[p].x + 1, to[i], p);
    Dfs_Down(to[i], p);
  }
}
int id2[maxn], len[maxn];
void Dfs_Link(int p, int f) {
  for (int i = he[p]; i; i = ne[i]) {
    if (to[i] == f) continue;
    Dfs_Link(to[i], p);
    if (len[to[i]] > len[p]) len[p] = len[to[i]], id2[p] = to[i];
  }
  len[p]++;
}
int cnt, stk[maxn];
bool Chk() {
  Dfs_Up(1, 0);
  int p = 1;
  while (id[p]) p = id[p];
  Dfs_Link(p, 0);
  while (p) stk[++cnt] = p, p = id2[p];
  Dfs_Down(1, 0);
  for (int i = 1; i <= n; ++i)
    if (mx[i].z && mx[i].z + mx[i].y - 1 >= k) return printf("No\n"), 0;
  return 1;
}
void Color(int p, int f, int d) {
  for (int i = he[p]; i; i = ne[i]) {
    if (to[i] == f) continue;
    col[to[i]] = (col[p] + d + k - 1) % k + 1;
    Color(to[i], p, d);
  }
}
void Work() {
  n = read(), k = read();
  for (int i = 1; i < n; ++i) Add_Edge(read(), read());
  if (k == 2) {
    col[1] = 1;
    Color(1, 0, 1);
    printf("Yes\n");
    for (int i = 1; i <= n; ++i) printf("%d ", col[i]);
    return;
  }
  if (Chk()) {
    for (int i = 1; i <= cnt; ++i) col[stk[i]] = i % k + 1;
    Color(stk[cnt / 2], stk[cnt / 2 + 1], -1);
    Color(stk[cnt / 2 + 1], stk[cnt / 2], 1);
    printf("Yes\n");
    for (int i = 1; i <= n; ++i) printf("%d ", col[i]);
  }
}
int main() {
  Work();
  return 0;
}
inline int read() {
  char c;
  bool type = 1;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') type = 0;
  int ans = c ^ 48;
  while ((c = getchar()) >= '0' && c <= '9')
    ans = (ans << 3) + (ans << 1) + (c ^ 48);
  return type ? ans : -ans;
}
