#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,h[1500001],e[3000001][2],cnt,sum,col[1500001],all;
struct nod {
int d,b;
} d[1500001];
inline int read() {
int f=1,x=0;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';
ch=getchar();
}
return f*x;
}
void add(int x,int y) {
e[++cnt][0]=y;
e[cnt][1]=h[x];
h[x]=cnt;
}
void init() {
n=read();
for(register int i=1; i<n; i++) {
int x=read(),y=read();
add(x,y);
add(y,x);
}
d[1].d=1;
}
bool cmp(nod a,nod b) {
return a.d>b.d;
}
void dfs(int p) {
for(register int i=h[p]; i; i=e[i][1])
if(!d[e[i][0]].d) {
d[e[i][0]].d=d[p].d+1;
dfs(e[i][0]);
}
all+=d[p].d;
d[p].b=p;
}
bool find(int p) {
if(sum>all/2)
return false;
if(sum==all/2) {
for(register int i=p; i<=n; i++)
col[d[i].b]=0;
return true;
}
if(p>n)
return false;
sum+=d[p].d;
if(find(p+1)) {
col[d[p].b]=1;
return true;
}
sum-=d[p].d;
if(find(p+1)) {
col[d[p].b]=0;
return true;
}
return false;
}
signed main() {
init();
dfs(1);
if(all%2==1)
cout<<-1;
else {
sort(d+1,d+1+n,cmp);
if(find(1))
for(register int i=1; i<=n; i++)
cout<<col[i]<<' ';
else
cout<<-1;
}
}