#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
template <class T>
void read(T &x) {
  int sgn = 1;
  char ch;
  x = 0;
  for (ch = getchar(); (ch < '0' || ch > '9') && ch != '-'; ch = getchar())
    ;
  if (ch == '-') ch = getchar(), sgn = -1;
  for (; '0' <= ch && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  x *= sgn;
}
template <class T>
void write(T x) {
  if (x < 0)
    putchar('-'), write(-x);
  else if (x < 10)
    putchar(x + '0');
  else
    write(x / 10), putchar(x % 10 + '0');
}
struct edge {
  int to, nxt;
} tree[N << 1];
int n, k, s = 1, t = 1, mid1, mid2, head[N], dep[N], dep2[N], par[N], col[N],
          cnt = 0;
void addedge(int u, int v) {
  edge x = {v, head[u]};
  tree[head[u] = cnt++] = x;
}
void dfs1(int u, int fa) {
  if (fa) dep[u] = dep[fa] + 1;
  for (int i = head[u]; ~i; i = tree[i].nxt) {
    int v = tree[i].to;
    if (v != fa) dfs1(v, u);
  }
}
void dfs2(int u, int fa) {
  if (fa) dep2[u] = dep2[fa] + 1, par[u] = fa;
  for (int i = head[u]; ~i; i = tree[i].nxt) {
    int v = tree[i].to;
    if (v != fa) dfs2(v, u);
  }
}
void dfs3(int u, int fa) {
  col[u] = (col[fa] + 1) % k;
  for (int i = head[u]; ~i; i = tree[i].nxt) {
    int v = tree[i].to;
    if (v != fa) dfs3(v, u);
  }
}
void dfs4(int u, int fa) {
  col[u] = (col[fa] + k - 1) % k;
  for (int i = head[u]; ~i; i = tree[i].nxt) {
    int v = tree[i].to;
    if (v != fa) dfs4(v, u);
  }
}
int main() {
  read(n), read(k);
  for (int i = 1; i <= n; i++) head[i] = -1;
  for (int i = 1; i < n; i++) {
    int u, v;
    read(u), read(v);
    addedge(u, v), addedge(v, u);
  }
  if (k == 1) {
    printf("Yes\n");
    for (int i = 1; i <= n; i++) write(1), putchar(' ');
    putchar('\n');
  } else {
    dep[1] = 1, dfs1(1, 0);
    if (k == 2) {
      printf("Yes\n");
      for (int i = 1; i <= n; i++) write(dep[i] & 1 ? 1 : 2), putchar(' ');
      putchar('\n');
    } else {
      for (int i = 2; i <= n; i++) {
        if (dep[i] > dep[s]) s = i;
      }
      dep[s] = 1, dfs1(s, 0);
      for (int i = 2; i <= n; i++) {
        if (dep[i] > dep[t]) t = i;
      }
      dep2[t] = 1, dfs2(t, 0);
      bool flag = true;
      for (int i = 1; i <= n; i++) {
        int d = (dep[i] + dep2[i] - dep[t]) / 2 + 1;
        int d1 = dep[i] - d, d2 = dep2[i] - d;
        if (d > 1 && d >= k - d1 && d >= k - d2) flag = false;
      }
      if (!flag)
        printf("No\n");
      else {
        mid1 = s;
        for (int i = 0; i < ((dep[t] - 1) >> 1); i++) mid1 = par[mid1];
        mid2 = par[mid1];
        col[mid1] = 1, col[mid2] = 0;
        dfs3(mid1, mid2), dfs4(mid2, mid1);
        printf("Yes\n");
        for (int i = 1; i <= n; i++) write(col[i] + 1), putchar(' ');
        putchar('\n');
      }
    }
  }
  return 0;
}
