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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;

typedef pair<int,int> pii;
const int N = 2e5;

int n;
vector<int> adj[N+5];
int dep[N+5];

bool bisa = 1;

void dfs(int x, int bef=-1){
	for(auto y: adj[x]){
		if(y == bef) continue;
		dep[y] = dep[x]+1;
	}
}

int itung[N+5];

vector<pii> isi;

int main(){
	cin >> n;
	for(int i=1;i<n;i++){
		int u,v;
		cin >> u >> v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	dep[0] = 1;
	dfs(1);
	int sat = 1;
	int dua = 2;
	int tig = 3;
	int cnt1 = (n+2)/3;
	int cnt2 = (n+1)/2;
	for(int i=1;i<=n;i++){
		if(i>1) printf(" ");
		if(dep[i] & 1){
			if(cnt1 > 0){
				cnt1--;
				printf("%d",sat);
				sat+=3;
			} else {
				printf("%d",tig);
				tig+=3;
			}
		} else {
			if(cnt2 > 0){
				cnt2--;
				printf("%d",dua);
				dua+=3;
			} else {
				printf("%d",tig);
				tig+=3;
			}
		}
	}
	printf("\n");
	
	return 0;
}