#include<bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;

typedef complex<double> com;

const int N 270000;
const double pi=acos(-1);

com a[N],b[N];
int n,m,p[N],l;

void dft(com *x,int tp)
{
	for (int i=0; i<n; i++) if (i<p[i]) swap(x[i],x[p[i]]);
	for (int mid=1; mid<n; mid<<=1)
	{
		com wn(cos(pi/mid),tp*sin(pi/mid));
		for (int r=mid<<1, j=0; j<n; j+=r)
		{
			com w(1,0);
			for (int k=0; k<mid; k++, w=w*wn)
			{
				com a=x[j+k], b=w*x[j+k+mid];
				x[j+k]=a+b;
				x[j+k+mid]=a-b;
			}
		}
	}
}

void fft(com a[],com b[],int m)
{
	int n,l;
	for ( n=1, l=0; n<=m; n<<=1, l++);
	for(int i=0; i<n; i++) p[i]=(p[i>>1]>>1)|((i&1)<<(l-1));
	dft(a,1); dft(b,1);
	for (int i=0; i<n; i++) a[i]*=b[i];
	dft(a,-1);
}

#define cint const int &
#define Push(a,b) push(a,b),push(b,a);
#define ___ cint u,cint f=0;
#define V e[i].v
#define For for (int i=s[u];i;i=e[i].n) if (V!=f && !vis[V])

struct edge{int v,n;} e[N<<1];
inline void push(cint u,cint v) {e[++tot]=(edge){v,s[u]};s[u]=tot;}

void dfs(___) {
	dn[u]=1;
	For dfs(V,u),dn[u]+=dn[V];
}

void find(___) {
	up[u]=sum-dn[u];
	For find(V,u);
	up[u]=max(up[u],dn[u]);
	if (up[u]<up[C]) C=u;
}

void go(___,cint dep=0) {
	if (lf[u]) vec[now][dep]++;
	For go(V,u,dep+1);
}


void solve(___) {
	vis[u]=1;
	For dfs(V);
	vec[u].resize(dn[u]<<2);
	now=u;
	For go(V);
	fft(vec[u],dn[u],1);
	for (int i=0;i<(dn[u]<<1);i++) vec[u][i]*=vec[u][i];
	For sum=dn[V],C=0,find(V),solve(C,u);
	fft(vec[u],dn[u],-1);
	fft(vec[u],dn[fa],1);
	for (int i=0;i<(dn[fa]<<1);i++) vec[fa][i]-=vec[u][i];
	vec[u].clear();
}

void leaf(___) {
	lf[u]=1;
	For leaf(V,u),lf[u]=0;
}

int main()
{
	scanf("%d",&n);
	for (int i=1;i<n;i++) {
		scanf("%d%d",&u,&v);
		Push(u,v);
	}
	leaf(1);
}