#include <bits/stdc++.h>
using namespace std;
vector<int> E[201000];
int n, K, Dis[201000], Dis2[201000];
void DFS(int a, int pp, int d) {
  Dis[a] = d;
  for (auto &x : E[a]) {
    if (x == pp) {
      continue;
    }
    DFS(x, a, d + 1);
  }
}
int D[201000], D2[201000], Deg[201000], R[201000];
void Go(int a, int pp) {
  int d = 0;
  int d2 = 0;
  for (auto &x : E[a]) {
    if (x == pp) continue;
    Go(x, a);
    d2 = max(d2, d + D[x] + 1);
    d = max(d, D[x] + 1);
  }
  D[a] = d, D2[a] = d2;
}
void Color(int a, int pp, int c, int d) {
  while (c > K) c -= K;
  R[a] = c;
  for (auto &x : E[a]) {
    if (x == pp) continue;
    Color(x, a, c + d, d);
  }
}
int main() {
  int i, a, b, MD = 0;
  scanf("%d%d", &n, &K);
  for (i = 1; i < n; i++) {
    scanf("%d%d", &a, &b);
    E[a].push_back(b);
    E[b].push_back(a);
    Deg[a]++, Deg[b]++;
    MD = max(MD, max(Deg[a], Deg[b]));
  }
  DFS(1, 0, 0);
  if (K == 2) {
    puts("Yes");
    for (i = 1; i <= n; i++) {
      printf("%d ", Dis[i] % 2 + 1);
    }
    return 0;
  }
  int Mx = -1;
  a = 0;
  for (i = 1; i <= n; i++) {
    if (Mx < Dis[i]) Mx = Dis[i], a = i;
  }
  DFS(a, 0, 0);
  if (MD == 2) {
    puts("Yes");
    for (i = 1; i <= n; i++) {
      printf("%d ", Dis[i] % K + 1);
    }
    return 0;
  }
  Mx = -1;
  for (i = 1; i <= n; i++) {
    Dis2[i] = Dis[i];
    if (Mx < Dis[i]) Mx = Dis[i], b = i;
  }
  if (Mx < K - 1) {
    puts("Yes");
    for (i = 1; i <= n; i++) printf("%d ", i % K + 1);
    return 0;
  }
  DFS(b, 0, 0);
  int Mn = 1e9, mid1 = 0, mid2 = 0, Mn2 = 1e9;
  for (i = 1; i <= n; i++) {
    if (Dis[i] + Dis2[i] == Dis[a]) {
      int t = max(Dis[i], Dis2[i]);
      if (t < Mn) {
        Mn2 = Mn, mid2 = mid1;
        Mn = t, mid1 = i;
      } else if (t < Mn2) {
        Mn2 = t, mid2 = i;
      }
    }
  }
  for (auto &x : E[mid1]) {
    if (Dis[x] + Dis2[x] == Dis[a]) {
      Go(mid1, x);
      Go(x, mid1);
      for (i = 1; i <= n; i++) {
        if (D2[i] >= K - 1 && Deg[i] >= 3) {
          break;
        }
      }
      if (i == n + 1) {
        Color(mid1, x, 1, 1);
        Color(x, mid1, K, K - 1);
        puts("Yes");
        for (i = 1; i <= n; i++) printf("%d ", R[i]);
        return 0;
      }
    }
  }
  puts("No");
}
