#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target( \
    "avx,avx2,fma,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
long long MOD = 1e9 + 7;
long long INF = 1e18;
const int N = 210000;
vector<long long> gr[N];
long long d[N];
long long pr[N];
long long go(long long v, long long pr_) {
  d[v] = d[pr_] + 1;
  pr[v] = pr_;
  long long ans = v;
  for (auto i : gr[v]) {
    if (i != pr_) {
      long long a = go(i, v);
      if (d[ans] < d[a]) {
        ans = a;
      }
    }
  }
  return ans;
}
long long used[N];
long long ogr[N];
long long ogr1[N];
long long ogr2[N];
long long cl[N];
long long gl[N];
long long dfs(long long v, long long pr_) {
  gl[v] = gl[pr_] + 1;
  if (used[v]) {
    gl[v]--;
  }
  long long sz = gl[v];
  for (auto i : gr[v]) {
    if (!used[i] && i != pr_) {
      sz = max(dfs(i, v), sz);
    }
  }
  return sz;
}
long long k;
void cl1(long long v, long long pr_, long long c) {
  cl[v] = c;
  for (auto i : gr[v]) {
    if (!used[i] && i != pr_) {
      cl1(i, v, (c + 1) % k);
    }
  }
}
void cl2(long long v, long long pr_, long long c) {
  cl[v] = c;
  for (auto i : gr[v]) {
    if (!used[i] && i != pr_) {
      cl2(i, v, (c - 1 + k) % k);
    }
  }
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0),
      cout << fixed << setprecision(20);
  long long n;
  cin >> n >> k;
  for (int i = 0; i < n - 1; i++) {
    long long u, v;
    cin >> u >> v;
    u--, v--;
    gr[u].push_back(v);
    gr[v].push_back(u);
  }
  long long vv = go(0, 0);
  d[vv] = 0;
  long long uu = go(vv, vv);
  long long nw = uu;
  used[uu] = 1;
  vector<long long> pt;
  pt.push_back(uu);
  while (nw != vv) {
    nw = pr[nw];
    pt.push_back(nw);
    used[nw] = 1;
  }
  for (int i = 0; i < k - 1; i++) {
    ogr1[i] = ogr[i] = k - i - 2;
  }
  for (int i = 0; i < k - 1; i++) {
    long long nww = (long long)pt.size() - i - 1;
    if (nww < 0) break;
    ogr2[nww] = k - i - 2;
    ogr[nww] = max(k - i - 2, ogr[nww]);
  }
  long long nwc = 0;
  for (int i = 0; i < pt.size(); i++) {
    if (k != 2 && dfs(pt[i], pt[i]) > ogr[i]) {
      cout << "No";
      return 0;
    }
    if (i < pt.size() / 2) {
      cl2(pt[i], pt[i], nwc);
    } else {
      cl1(pt[i], pt[i], nwc);
    }
    nwc = (nwc + 1) % k;
  }
  cout << "Yes"
       << "\n";
  for (int i = 0; i < n; i++) {
    cout << cl[i] + 1 << " ";
  }
}
