1 #include<cstdio>
2 #include<algorithm>
3 #include<cstring>
4 #define maxn 1005
5 using namespace std;
6 int sta[maxn],size[maxn],map[maxn][maxn],cap[maxn],belong[maxn],n,m,top,pro;
7 void dfs(int u,int fa)
8 {
9 sta[++top]=u;
10 for(int i=1; i<=n ; ++i)
11 if(map[u][i])
12 {
13 if(i==fa)continue;
14 dfs(i,u);
15 if(size[u]+size[i]>=m)
16 {
17 size[u]=0;
18 cap[++pro]=u;
19 while(sta[top]!=u)belong[sta[top--]]=pro;
20 }
21 else size[u]+=size[i];
22 }
23 size[u]++;
24 }
25 void dolast(int u,int fa,int c)
26 {
27 if(belong[u])return ;
28 belong[u]=c;
29 for(int i=1 ; i<=n ; ++i )
30 if(map[u][i])
31 if(i!=fa)
32 dolast(i,u,c);
33 }
34 int main()
35 {
36 int u,v;
37 scanf("%d%d",&n,&m);
38 if(m>n)
39 {
40 printf("0");
41 return 0;
42 }
43 for(int i=1; i<n ; ++i)
44 {
45 scanf("%d%d",&u,&v);
46 map[u][v]=map[v][u]=1;
47 }
48 dfs(1,0);
49 if(!pro)cap[++pro]=1;
50 dolast(1,0,pro);
51 printf("%d\n",pro);
52 for(int i=1 ; i<=n ; ++i )printf("%d ",belong[i]);
53 printf("\n");
54 for(int i=1 ; i<=pro ; ++i)printf("%d ",cap[i]);
55 return 0;
56 }