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 PyPy3 (2.4.0) (judge verdict: Wrong Answer)

n=int(input())
l1=[set() for i in range(n+1)]
l2=[set() for i in range(n+1)]
l3=[set() for i in range(n+1)]

for i in range(n-1):
    a,b=[int(j) for j in input().split()]
    l1[a].add(b)
    l1[b].add(a)

for i in range(1,1+n):
    for j in l1[i]:
        l2[i]^=l1[j]
    if i in l2[i]:
        l2[i].remove(i)

for i in range(1,1+n):
    for j in l2[i]:
        l3[i]^=l1[j]
    l3[i]-=l1[i]

l=set()
for i in range(1,1+n):
    for j in l3[i]:
        p,q=min(i,j),max(i,j)
        l.add((p-1,q-1))

ans=[0]*n
s1=list(range(1,n+1,3))
s2=list(range(2,n+1,3))
s3=list(range(3,n+1,3))
p,q,r=0,0,0
s,t,u=len(s1),len(s2),len(s3)
import collections
ll=collections.Counter() 
for i,j in l:
    ll[i]+=1
    ll[j]+=1
lll=ll.most_common()
for x,y in lll[::-1]:
    i=int(x)
    for j in l3[i+1]:
        j-=1
        if ans[i]==0 and ans[j]==0:
            if p<s and q<t:
                ans[i]=s1[p]
                ans[j]=s2[q]
                p+=1
                q+=1
            else:
                if p<s:
                    ans[i]=s1[p]
                    p+=1
                    if r<u:
                        ans[j]=s3[r]
                        r+=1
                    else:
                        print(-1)
                        exit()
                elif q<t:
                    ans[j]=s1[p]
                    p+=1
                    if r<u:
                        ans[i]=s3[r]
                        r+=1
                    else:
                        print(-1)
                        exit()
                else:
                    if r<u-1:
                        ans[i]=s3[r]
                        ans[j]=s3[r+1]
                        r+=2
                    else:
                        print(-1)
                        exit()

for i in range(n):
    if ans[i]==0:
        if p<s:
            ans[i]=s1[p]
            p+=1
        elif q<t:
            ans[i]=s2[q]
            q+=1
        elif r<u:
            ans[i]=s3[r]
            r+=1
        else:
            print(-1)
            exit()


print(*ans)