Problem:
Score : 600 points

Problem Statement

We have a tree with N vertices. The vertices are numbered 1 to N, and the i-th edge connects Vertex a_i and Vertex b_i.

Takahashi loves the number 3. He is seeking a permutation p_1, p_2, \ldots , p_N of integers from 1 to N satisfying the following condition:

For every pair of vertices (i, j), if the distance between Vertex i and Vertex j is 3, the sum or product of p_i and p_j is a multiple of 3.

Here the distance between Vertex i and Vertex j is the number of edges contained in the shortest path from Vertex i to Vertex j.

Help Takahashi by finding a permutation that satisfies the condition.

Constraints

2\leq N\leq 2\times 10^5

1\leq a_i, b_i \leq N

The given graph is a tree.

Input

Input is given from Standard Input in the following format:

N
a_1 b_1
a_2 b_2
\vdots
a_{N-1} b_{N-1}

Output

If no permutation satisfies the condition, print -1.

Otherwise, print a permutation satisfying the condition, with space in between.
If there are multiple solutions, you can print any of them.

Sample Input 1

5
1 2
1 3
3 4
3 5

Sample Output 1

1 2 5 4 3

The distance between two vertices is 3 for the two pairs (2, 4) and (2, 5).

p_2 + p_4 = 6

p_2\times p_5 = 6

Thus, this permutation satisfies the condition.

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)

N = gets.to_i
lists = {}
# binding.pry
(N-1).times do
  s, t = gets.split.map(&:to_i)
  (lists[s-1] ||= []) << t-1
  (lists[t-1] ||= []) << s-1
end
# p lists

check = Array.new(N)
check[0] = "blue"
queue = [] << 0
# binding.pry
while !queue.empty?
  now = queue.shift
  lists[now].each do |to|
    if !check[to]
      case check[now]
      when "blue"
        color = "red"
      when "red"
        color = "blue"
      end
      check[to] = color
      queue << to
    end
  end
end
# puts check
b_count = check.count("blue")
r_count = N - b_count
cnt1 = 0
cnt2 = 0
cnt3 = 1
# if b_count > N / 3 && r_count > N / 3
if b_count >= r_count
  N.times do |i|
    if check[i] == "blue"
      if cnt1 * 3 + 1 <= N
        print "#{cnt1 * 3 + 1} "
        cnt1 += 1
      elsif cnt3 * 3 <= N
        print "#{cnt3 * 3} "
        cnt3 += 1
      else
        print "#{cnt2 * 3 + 2} "
        cnt2 += 1
      end
    else
      if cnt2 * 3 + 2 <= N
        print "#{cnt2 * 3 + 2} "
        cnt2 += 1
      elsif cnt3 * 3 <= N
        print "#{cnt3 * 3} "
        cnt3 += 1
      else
        print "#{cnt1 * 3 + 1} "
        cnt1 += 1
      end
    end
  end
else
  N.times do |i|
    if check[i] == "red"
      if cnt1 * 3 + 1 <= N
        print "#{cnt1 * 3 + 1} "
        cnt1 += 1
      elsif cnt3 * 3 <= N
        print "#{cnt3 * 3} "
        cnt3 += 1
      else
        print "#{cnt2 * 3 + 2} "
        cnt2 += 1
      end
    else
      if cnt2 * 3 + 2 <= N
        print "#{cnt2 * 3 + 2} "
        cnt2 += 1
      elsif cnt3 * 3 <= N
        print "#{cnt3 * 3} "
        cnt3 += 1
      else
        print "#{cnt1 * 3 + 1} "
        cnt1 += 1
      end
    end
  end
# elsif b_count <= N / 3
#   N.times do |i|
#     if check[i] == "blue"
#       print "#{cnt2 * 3 + 2} "
#       cnt2 += 1
#     else
#       if cnt3 * 3 <= N
#         print "#{cnt3 * 3} "
#         cnt3 += 1
#       else
#         print "#{cnt1 * 3 + 1} "
#         cnt1 += 1
#       end
#     end
#   end
# elsif r_count <= N / 3
#   N.times do |i|
#     if check[i] == "red"
#       print "#{cnt2 * 3 + 2} "
#       cnt2 += 1
#     else
#       if cnt3 * 3 <= N
#         print "#{cnt3 * 3} "
#         cnt3 += 1
#       else
#         print "#{cnt1 * 3 + 1} "
#         cnt1 += 1
#       end
#     end
#   end
end
puts