Problem: 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.

Example

Input

5
1 2
1 3
3 4
3 5


Output

1 2 5 4 3

Solution (in JAVA):

Solution:
import java.util.*;

public class Main{
    
    static int n;
    static List<Integer>[] g;
    static int[] color;
    static int[] cnt;
    
    public static void dfs(int v){
        for(int u : g[v]){
            if(color[u] == -1){
                color[u] = color[v]^1;
                cnt[color[u]]++;
                dfs(u);
            }
        }
    }
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        n = Integer.parseInt(sc.next());
        g = new List[n];
        for(int i=0; i<n; i++){
            g[i] = new ArrayList<>();
        }
        
        for(int i=0; i<n-1; i++){
            int a = Integer.parseInt(sc.next())-1;
            int b = Integer.parseInt(sc.next())-1;
            g[a].add(b);
            g[b].add(a);
        }
        
        cnt = new int[2];
        color = new int[n];
        Arrays.fill(color, -1);
        color[0] = 0;
        cnt[0]++;
        dfs(0);
        
        if(cnt[0] > cnt[1]){
            for(int i=0; i<n; i++){
                color[i] ^= 1;
            }
            cnt[0] = cnt[1];
        }
        
        StringJoiner sj = new StringJoiner(" ");
        int[] p = {1, 2, 3};
        if(cnt[0]<=n/3){
            for(int i=0; i<n; i++){
                if(color[i]==0){
                    sj.add(p[2] + "");
                    p[2] += 3;
                }else{
                    for(int j=0; j<3; j++){
                        if(p[j]<=n){
                            sj.add(p[j] + "");
                            p[j] += 3;
                            break;
                        }
                    }
                }
            }
        }else{
            for(int i=0; i<n; i++){
                if(p[color[i]]<=n){
                    sj.add(p[color[i]] + "");
                    p[color[i]] += 3;
                }else{
                    sj.add(p[2] + "");
                    p[2] += 3;
                }
            }
        }
        
        System.out.println(sj.toString());
    }
}