#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 50;
int n, k;
vector<int> g[N];
int col[N];
int in[N];
int d1[N], d2[N];
int x;
int d;
vector<int> v;
int timer;
int m1[N], m2[N], m3[N];
int dub[N];
int a, b;
int id[N];
int vidjen[N];
int cc;
int nadjidub(int u, int pret) {
  int sum = 0;
  for (int x : g[u]) {
    if (x == pret) continue;
    sum += nadjidub(x, u);
  }
  dub[u] = sum + 1;
  return dub[u];
}
void vreme(int u, int pret) {
  in[u] = ++timer;
  for (int x : g[u]) {
    if (x == pret) continue;
    vreme(x, u);
  }
}
void distanca(int u, int pret, int d, int dis[]) {
  dis[u] = d;
  for (int x : g[u]) {
    if (x == pret) continue;
    distanca(x, u, d + 1, dis);
  }
}
void najdalji(int u, int pret, int dd) {
  if (dd >= d) {
    x = u;
    d = dd;
  }
  for (int x : g[u]) {
    if (x == pret) continue;
    najdalji(x, u, dd + 1);
  }
}
bool nadjiput(int u, int pret, int x) {
  if (u == x) {
    v.push_back(u);
    return true;
  }
  for (int xx : g[u]) {
    if (xx == pret) continue;
    if (nadjiput(xx, u, x)) {
      v.push_back(u);
      return true;
    }
  }
  return false;
}
int dfss(int u, int pret) {
  int ma1 = 0;
  int ma2 = 0;
  int ma3 = 0;
  int ind;
  for (int x : g[u]) {
    if (x == pret) continue;
    int k = dfss(x, u);
    if (k >= ma1) {
      ind = x;
      ma3 = ma2;
      ma2 = ma1;
      ma1 = k;
      continue;
    }
    if (k >= ma2) {
      ma3 = ma2;
      ma2 = k;
      continue;
    } else if (k >= ma3) {
      ma3 = k;
    }
  }
  int w = 0;
  if (in[a] < in[u] || in[a] >= in[u] + dub[u]) w = d1[u];
  if (in[b] < in[u] || in[b] >= in[u] + dub[u]) w = max(d2[u], w);
  m1[u] = w;
  if (u == cc) m1[u] = ma3;
  m2[u] = ma1;
  m3[u] = ma2;
  return ma1 + 1;
}
void resiza2(int u, int pret, int c) {
  col[u] = c;
  for (int x : g[u]) {
    if (x == pret) continue;
    int w = 1;
    if (c == 1) w = 2;
    resiza2(x, u, w);
  }
}
void oboj(int x, int c, int smer) {
  if (c == k + 1) c = 1;
  if (c == 0) c = k;
  col[x] = c;
  for (int u : g[x]) {
    if (col[u]) continue;
    oboj(u, c + smer, smer);
  }
}
int main() {
  {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cerr.tie(NULL);
  }
  cin >> n >> k;
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  if (k == 2) {
    resiza2(1, -1, 1);
    cout << "YES"
         << "\n";
    for (int i = 1; i <= n; i++) cout << col[i] << " ";
    return 0;
  }
  x = 1;
  najdalji(1, -1, 0);
  a = x;
  d = 0;
  x = b;
  najdalji(a, -1, 0);
  b = x;
  distanca(a, -1, 0, d1);
  distanca(b, -1, 0, d2);
  nadjiput(a, -1, b);
  cc = v[((int)v.size() - 1) / 2];
  int ww = 1;
  int sz = ((int)v.size() - 1) / 2;
  int indd = 0;
  for (int x : v) {
    vidjen[x] = 1;
    if (indd <= sz)
      id[x] = 1;
    else
      id[x] = -1;
    if (ww == k + 1) ww = 1;
    col[x] = ww;
    ww++;
    indd++;
  }
  vreme(cc, -1);
  nadjidub(cc, -1);
  dfss(cc, -1);
  for (int i = 1; i <= n; i++) {
    if ((int)g[i].size() < 3) continue;
    int cnt = 0;
    if (m1[i] + m2[i] + 1 >= k) cnt++;
    if (m1[i] + m3[i] + 1 >= k) cnt++;
    if (m2[i] + m3[i] + 1 >= k) cnt++;
    if (cnt == 3) {
      cout << "NO";
      return 0;
    }
  }
  for (int i = 1; i <= n; i++) {
    if (col[i] && vidjen[i]) {
      for (int x : g[i]) {
        if (!col[x]) {
          int w = id[i];
          if (w == 1)
            oboj(x, col[i] - 1, -1);
          else
            oboj(x, col[i] + 1, 1);
        }
      }
    }
  }
  cout << "YES"
       << "\n";
  for (int i = 1; i <= n; i++) cout << col[i] << " ";
  return 0;
}
