#include <bits/stdc++.h>
using namespace std;
const int mx = 2e5 + 5;
struct edge {
  int v, next;
} e[mx << 2];
int in[mx];
int n, k, p;
int head[mx];
int ans[mx];
int tot;
void add(int u, int v) {
  e[tot].v = v;
  e[tot].next = head[u];
  head[u] = tot;
  tot++;
}
void dfs(int u, int fa, int col) {
  int l = 1, flag = 0;
  for (int i = head[u]; ~i; i = e[i].next)
    if (e[i].v != fa) {
      while (l == col && !flag) {
        flag = 1;
        l = l % p + 1;
      }
      ans[i / 2] = l;
      dfs(e[i].v, u, l);
      l = l % p + 1;
    }
}
int main() {
  scanf("%d%d", &n, &k);
  memset(head, -1, sizeof(head));
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    add(u, v);
    add(v, u);
    in[u]++;
    in[v]++;
  }
  sort(in + 1, in + n + 1);
  p = in[n];
  for (int i = 1; i <= k; i++)
    if (in[n - i] != in[n - i + 1]) p = in[n - i];
  dfs(1, 0, 0);
  printf("%d\n", p);
  for (int i = 0; i < n - 1; i++)
    printf("%d%c", ans[i], i == n - 1 ? '\n' : ' ');
  return 0;
}
