if !ENV['RUBY_THREAD_VM_STACK_SIZE']
  exec({'RUBY_THREAD_VM_STACK_SIZE'=>'1000000000'}, '/usr/bin/ruby', $0)
end



def dfs(i, p=-1, c=-1)
  color = 1
  @g[i].each do |j|
    next if j == p
    color += 1 if c == color
    a, b = i, j
    a, b = a, b if a > b
    
    @edge[[a,b]] = color
    dfs(j, i, color)
    color += 1
  end
end

N=gets.to_i
AB=(N-1).times.map{gets.split.map(&:to_i)}

=begin
N = 10**5
ab=[]
(N-1).times do |i|
  ab << [i+1, i+2]
end
AB=ab
=end

@g = Array.new(N){[]}
g_n = Array.new(N, 0)
edge_i = Array.new(N-1)
(N-1).times do |i|
  a, b = AB[i][0]-1, AB[i][1]-1
  @g[a] << b
  @g[b] << a
  g_n[a] += 1
  g_n[b] += 1
  edge_i[i] = [a,b]
end

@edge = Hash.new()
dfs(0)

puts g_n.max
edge_i.each do |a,b|
  puts @edge[[a,b]]
end