func_code_string: #include <bits/stdc++.h>   const int maxn = 200005, maxm = maxn << 1;   int n, m, e, s1, s2, s, maxx, col, flg, mid;   int start[maxn], to[maxm], then[maxm], dep[maxn], f[maxn], ans[maxn],       flen[maxn], slen[maxn];   inline void add(int x, int y) { then[++e] = start[x], start[x] = e, to[e] = y; }   void dfs(int x, int last) {     f[x] = last, dep[x] = dep[last] + 1;     flen[x] = slen[x] = 0;     if (dep[x] > maxx) maxx = dep[x], s = x;     for (int i = start[x]; i; i = then[i]) {       int y = to[i];       if (y == last) continue;       dfs(y, x);     }   }   void getlen(int x, int last) {     for (int i = start[x]; i; i = then[i]) {       int y = to[i];       if (y == last || ans[y]) continue;       getlen(y, x);       if (flen[y] + 1 > flen[x])         slen[x] = flen[x], flen[x] = flen[y] + 1;       else if (flen[y] + 1 > slen[x])         slen[x] = flen[y] + 1;       if (slen[y] + 1 > slen[x]) slen[x] = slen[y] + 1;     }   }   void solve(int x, int c, int d, int t) {     ans[x] = c;     c = (c + t + m - 1) % m + 1;     for (int i = start[x]; i; i = then[i]) {       int y = to[i];       if (ans[y] != 0) continue;       solve(y, c, d + 1, t);     }   }   int main() {     scanf( %d%d , &n, &m);     for (int i = 1; i < n; i++) {       int x, y;       scanf( %d%d , &x, &y);       add(x, y), add(y, x);     }     maxx = -1000000000, dfs(1, 0), s1 = s;     maxx = -1000000000, dfs(s, 0), s2 = s;     if (m == 2) {       puts( Yes );       for (int i = 1; i <= n; i++)         printf( %d%c , dep[i] % 2 + 1, i == n ?   n  :    );       return 0;     }     for (int i = s2; i != 0; i = f[i]) {       col = col % m + 1;       if ((dep[s1] + dep[s2]) / 2 == dep[i]) mid = i;       ans[i] = col;     }     for (int i = s2; i != 0; i = f[i]) {       getlen(i, 0);       if (ans[i] && flen[i] && dep[i] + flen[i] >= m &&           (dep[s2] - dep[i] + 1) + flen[i] >= m) {         puts( No );         return 0;       }     }     for (int i = 1; i <= n; i++)       if (flen[i] + slen[i] + 1 >= m) {         puts( No );         return 0;       }     for (int i = s2; i != mid; i = f[i]) solve(i, ans[i], 1, -1);     for (int i = mid; i != 0; i = f[i]) solve(i, ans[i], 1, 1);     puts( Yes );     for (int i = 1; i <= n; i++) printf( %d%c , ans[i], i == n ?   n  :    );     return 0;   }   