using
System;
using
System.Collections.Generic;
class
Program
{
static
void
AddEdge(List<List<
int
>> gr,
int
x,
int
y,
List<Tuple<
int
,
int
>> edges)
{
gr[x].Add(y);
gr[y].Add(x);
edges.Add(Tuple.Create(x, y));
}
static
int
ColorTree(
int
n, List<List<
int
>> gr,
List<Tuple<
int
,
int
>> edges)
{
int
K = 0;
Dictionary<Tuple<
int
,
int
>,
int
> color =
new
Dictionary<Tuple<
int
,
int
>,
int
>();
List<
int
> cs =
new
List<
int
>(
new
int
[n]);
List<
int
> used =
new
List<
int
>(
new
int
[n]);
Queue<
int
> que =
new
Queue<
int
>();
used[0] = 1;
que.Enqueue(0);
while
(que.Count > 0) {
int
v = que.Dequeue();
if
(K < gr[v].Count)
K = gr[v].Count;
int
cur = 1;
foreach
(
int
u
in
gr[v]) {
if
(used[u] != 0)
continue
;
if
(cur == cs[v])
cur++;
cs[u] = color[Tuple.Create(u, v)]
= color[Tuple.Create(v, u)] = cur++;
used[u] = 1;
que.Enqueue(u);
}
}
Console.WriteLine(K);
foreach
(Tuple<
int
,
int
> p
in
edges)
Console.Write(color[p] +
" "
);
return
K;
}
static
void
Main() {
int
n = 8;
List<List<
int
>> gr =
new
List<List<
int
>>();
for
(
int
i = 0; i < n; i++)
gr.Add(
new
List<
int
>());
List<Tuple<
int
,
int
>> edges =
new
List<Tuple<
int
,
int
>>();
AddEdge(gr, 0, 1, edges);
AddEdge(gr, 1, 2, edges);
AddEdge(gr, 1, 3, edges);
AddEdge(gr, 1, 4, edges);
AddEdge(gr, 3, 6, edges);
AddEdge(gr, 4, 5, edges);
AddEdge(gr, 5, 7, edges);
ColorTree(n, gr, edges);
}
}