#include<bits/stdc++.h>
using namespace std;
vector<int>v[3],g[2],l[200003]; 
int n,ans[200003];bool used[200003];
void dfs(int x,bool a,int p){
	g[a].push_back(x);
	for(int i=0;i<l[x].size();i++)
		if(l[x][i]!=p)
			dfs(l[x][i],a^1,x);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);x--;y--;l[x].push_back(y);l[y].push_back(x);}
	dfs(0,0,-1);
	for(int i=1;i<=n;i++)v[i%3].push_back(i);
	if(g[1].size()<g[0].size())swap(g[0],g[1]);
	if(g[0].size()<=v[0].size())
	{
		for(int i=0;i<g[0].size();i++)
			ans[g[0][i]]=v[0][i],
			used[v[0][i]]=1;
		for(int i=1;i<=n;i++)
			if(!used[i])
				ans[g[1].back()]=i,
				g[1].pop_back();
	}else{
		for(int i=0;i<v[1].size();i++)
			ans[g[0].back()]=v[1][i],
			g[0].pop_back();
		for(int i=0;i<v[2].size();i++)
			ans[g[1].back()]=v[2][i],
			g[1].pop_back();
		for(int i=0;i<g[0].size();i++)
			ans[g[0][i]]=v[0].back(),
			v[0].pop_back();
		for(int i=0;i<g[1].size();i++)
			ans[g[1][i]]=v[0].back(),
			v[0].pop_back();
	}
	for(int i=0;i<n;i++)printf("%d ",ans[i]);
}