#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read() {
  T f = 0, x = 0;
  char c = getchar();
  while (!isdigit(c)) f = c == '-', c = getchar();
  while (isdigit(c)) x = x * 10 + c - 48, c = getchar();
  return f ? -x : x;
}
namespace run {
const int N = 4e5 + 9;
int n, K, head[N], nex[N], to[N], cnt;
inline void add(int u, int v) {
  nex[++cnt] = head[u];
  head[u] = cnt, to[cnt] = v;
}
queue<int> q;
int dist[N], pre[N];
inline int bfs(int S) {
  while (!q.empty()) q.pop();
  for (int i = 1; i <= n; i++) dist[i] = n + 1;
  q.push(S), pre[S] = dist[S] = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = head[u]; i; i = nex[i])
      if (dist[to[i]] == n + 1) {
        dist[to[i]] = dist[u] + 1;
        q.push(to[i]), pre[to[i]] = u;
      }
    if (q.empty()) return u;
  }
  assert(0);
  return 0;
}
int dep[N], vis[N], mxdep;
inline void dfs(int u, int _f) {
  dep[u] = dep[_f] + 1;
  for (int i = head[u]; i; i = nex[i])
    if (to[i] ^ _f) dfs(to[i], u);
}
int st[N], top, col[N], rt;
inline void chk(int u, int _f, int inv) {
  dep[u] = dep[_f] + 1, mxdep = max(mxdep, dep[u]);
  if (!vis[u]) {
    if (inv)
      col[u] = col[st[rt + dep[u] - 1]];
    else
      col[u] = col[st[rt - dep[u] + 1]];
  }
  for (int i = head[u]; i; i = nex[i])
    if (!vis[to[i]] && to[i] ^ _f) chk(to[i], u, inv);
}
int main() {
  n = read<int>(), K = read<int>();
  for (int i = 1; i < n; i++) {
    int u = read<int>(), v = read<int>();
    add(u, v), add(v, u);
  }
  if (K == 2) {
    puts("Yes"), dfs(1, 0);
    for (int i = 1; i <= n; i++) printf("%d ", (dep[i] & 1) + 1);
    return 0;
  }
  int S = bfs(1), T = bfs(S);
  while (T) st[++top] = T, T = pre[T];
  for (int i = 1; i <= top; i++) col[st[i]] = i % K + 1, vis[st[i]] = 1;
  if (top == n) {
    puts("Yes");
    for (int i = 1; i <= n; i++) printf("%d ", col[i]);
    puts("");
    return 0;
  }
  for (int i = 1; i <= top; i++) {
    mxdep = 0, rt = i;
    if (i <= top / 2)
      chk(st[i], 0, 0);
    else
      chk(st[i], 0, 1);
    if (mxdep + i - 1 >= K && top - i + mxdep >= K) puts("No"), exit(0);
  }
  puts("Yes");
  for (int i = 1; i <= n; i++) printf("%d ", col[i]);
  puts("");
  return 0;
}
}  // namespace run
int main() { return run::main(); }
