local List = {}
function List.new ()
    return {first = 0, last = -1}
end

function List.pushleft (list, value)
    local first = list.first - 1
    list.first = first
    list[first] = value
end

function List.pushright (list, value)
    local last = list.last + 1
    list.last = last
    list[last] = value
end

function List.popleft (list)
    local first = list.first
    local value = list[first]
    list[first] = nil
    list.first = first + 1
    return value
end

function List.popright (list)
    local last = list.last
    local value = list[last]
    list[last] = nil
    list.last = last - 1
    return value
end

function List.empty (list)
    return list.first > list.last
end

----------

local n=io.read("n")
local graph={}
for i=1,n do
    graph[i]={}
end
for i=1,n-1 do
    local a,b=io.read("n","n")
    graph[a][b]=i
    graph[b][a]=i
end

local que=List.new()
List.pushright(que,1)
local out={}
local k=0
while not List.empty(que) do
    local a=List.popleft(que)
    local used=0
    for b,i in pairs(graph[a]) do
        if out[-i] then
            used=used+out[-i]
            break
        end
    end
    local deg=0
    local color=1
    for b,i in pairs(graph[a]) do
        if color==used then
            color=color+1
        end
        out[i]=color
        if graph[a][b]>0 then
            graph[a][b]=-graph[a][b]
            graph[b][a]=-graph[b][a]
            List.pushright(que,b)
            color=color+1
        end
        deg=deg+1
    end
    k=math.max(deg,k)
end

print(k)
for i=1,n-1 do
    print(out[i])
end