#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline bool upmin(T &x, T y) {
  return y < x ? x = y, 1 : 0;
}
template <typename T>
inline bool upmax(T &x, T y) {
  return x < y ? x = y, 1 : 0;
}
const long double eps = 1e-11;
const long double pi = acos(-1);
const int oo = 1 << 30;
const long long loo = 1ll << 62;
const int mods = 1e9 + 7;
const int MAXN = 600005;
const int INF = 0x3f3f3f3f;
inline int read() {
  int f = 1, x = 0;
  char c = getchar();
  while (c < '0' || c > '9') {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + (c ^ 48);
    c = getchar();
  }
  return x * f;
}
vector<int> e[MAXN];
int dist[MAXN], distu[MAXN], distv[MAXN], vis[MAXN], dep[MAXN];
void dfs(int x, int father) {
  for (int i = 0; i < e[x].size(); i++)
    if (e[x][i] != father) {
      dist[e[x][i]] = dist[x] + 1;
      dfs(e[x][i], x);
    }
}
void add_edge(int u, int v) {
  e[u].push_back(v);
  e[v].push_back(u);
}
int main() {
  int n = read(), k = read(), u = 0, v = 0;
  for (int i = 1; i < n; i++) {
    int u = read(), v = read();
    add_edge(u, v);
  }
  dist[1] = 0;
  dfs(1, 0);
  for (int i = 1; i <= n; i++)
    if (dist[i] > dist[u]) u = i;
  dist[u] = 0;
  dfs(u, 0);
  for (int i = 1; i <= n; i++) {
    distu[i] = dist[i];
    if (dist[i] > dist[v]) v = i;
  }
  dist[v] = 0;
  dfs(v, 0);
  for (int i = 1; i <= n; i++) distv[i] = dist[i];
  int len = distu[v];
  for (int i = 1; i <= n; i++)
    if (distu[i] + distv[i] == len) vis[i] = 1, dep[i] = distu[i];
  if (k == 2) {
    puts("Yes");
    for (int i = 1; i <= n; i++) printf("%d\n", dist[i] % 2 + 1);
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    if (vis[i]) continue;
    if (distu[i] >= k - 1 && distv[i] >= k - 1) {
      puts("No");
      return 0;
    } else if (distu[i] < k - 1 && distv[i] < k - 1) {
      if (distu[i] == distv[i])
        dep[i] = 0;
      else if (distu[i] > distv[i])
        dep[i] = distu[i];
      else
        dep[i] = len - distv[i];
    } else if (distu[i] >= k - 1)
      dep[i] = distu[i];
    else
      dep[i] = len - distv[i];
  }
  puts("Yes");
  for (int i = 1; i <= n; i++) printf("%d ", dep[i] % k + 1);
  return 0;
}
