#include "bits/stdc++.h"
using namespace std;
const int N_ = 200100;
vector<int> V[N_], G[N_], E[N_];
int N, Co[N_], Res[N_];
void Haku(int s, int e) {
	Co[s] = !Co[e];
	G[Co[s]].push_back(s);
	for (auto &u : V[s]) if (u != e) Haku(u, s);
}
int main() {
	int i, p = 0;
	scanf("%d", &N);
	for (i = 1; i <= N; ++i) E[i % 3].push_back(i);
	for (i = 1; i + 1 <= N; ++i) {
		int a, b;
		scanf("%d%d", &a, &b);
		V[a].push_back(b);
		V[b].push_back(a);
	}
	Haku(1, 1);
	if (G[1].size() < G[0].size()) p = !p;
	if (G[p].size() <= E[0].size()) {
		for (i = 1; i <= N; ++i) if (Co[i] == p) {
			Res[i] = E[0].back();
			E[0].pop_back();
		}
		for (i = 1; i <= N && E[1].size(); ++i) if (!Res[i]) {
			Res[i] = E[1].back();
			E[1].pop_back();
		}
		for (i = 1; i <= N && E[2].size(); ++i) if (!Res[i]) {
			Res[i] = E[2].back();
			E[2].pop_back();
		}
	} else {
		for (i = 1; i <= N && E[1].size(); ++i) if (Co[i]) {
			Res[i] = E[1].back();
			E[1].pop_back();
		}
		for (i = 1; i <= N && E[2].size(); ++i) if (!Co[i]) {
			Res[i] = E[2].back();
			E[2].pop_back();
		}
	}
	for (i = 1; i <= N; ++i) if (!Res[i]) {
		Res[i] = E[0].back();
		E[0].pop_back();
	}
	for (i = 1; i <= N; ++i) printf("%d ", Res[i]);
	puts("");
}
