#include<bits/stdc++.h> #define maxn 200005 #define int long long #define put() putchar('\n') usingnamespace std; inlinevoidread(int &x){ int f=1;x=0;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} x*=f; } int deep[maxn],son[maxn],n,h[maxn],head=1; structyyy{ int to,z; inlinevoidadd(int x,int y){ to=y;z=h[x];h[x]=head; } }a[maxn*2]; int *f[maxn*2],*g[maxn*2],stac[maxn*4],*id=stac; int ans; inlinevoiddfs1(int x,int pre){ int i;deep[x]=1; for (i=h[x];i;i=a[i].z) if (a[i].to^pre) { dfs1(a[i].to,x); if (deep[x]<deep[a[i].to]+1) deep[x]=deep[a[i].to]+1,son[x]=a[i].to; } } inlinevoidsolve(int x,int pre){ int i,j; f[x][0]=1;g[x][0]=0; if (son[x]) f[son[x]]=f[x]+1,g[son[x]]=g[x]-1,solve(son[x],x); elsereturn ; ans+=g[x][0]; for (i=h[x];i;i=a[i].z) if (a[i].to!=pre&&a[i].to!=son[x]) { f[a[i].to]=id;id+=deep[a[i].to]*2+2;g[a[i].to]=id;id+=deep[a[i].to]*2+2;solve(a[i].to,x); for (j=0;j<=deep[a[i].to];j++) { if (j) ans+=g[a[i].to][j]*f[x][j-1]; ans+=f[a[i].to][j]*g[x][j+1]; } for (j=0;j<=deep[a[i].to];j++){ g[x][j+1]+=f[a[i].to][j]*f[x][j+1]; if (j) g[x][j-1]+=g[a[i].to][j]; } for (j=1;j<=deep[a[i].to];j++) f[x][j]+=f[a[i].to][j-1]; } } signedmain(void){ int i,x,y; read(n); for (i=1;i<n;i++) { read(x);read(y); a[++head].add(x,y); a[++head].add(y,x); } dfs1(1,0); f[1]=id;id+=deep[1]*2;g[1]=id;id+=deep[1]*2; solve(1,0); printf("%lld\n",ans); return0; }