#include<bits/stdc++.h>
#define MAXN 100010
#define FILE "read"
using namespace std;
typedef long long ll;
struct node{int y,next;}e[MAXN<<1];
int n,len,Link[MAXN],deep[MAXN],bot[MAXN];
ll ans,*p,memp[MAXN*5],*f[MAXN],*g[MAXN];
char buf[1<<15],*fs,*ft;
inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int read(){
int x=0,f=1; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getc();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getc();}
return x*f;
}
void insert(int x,int y){e[++len].next=Link[x];Link[x]=len;e[len].y=y;}
void dfs(int x,int fa){
bot[x]=x;
for(int i=Link[x];i;i=e[i].next)if(e[i].y!=fa){
deep[e[i].y]=deep[x]+1; dfs(e[i].y,x);
if(deep[bot[e[i].y]]>deep[bot[x]]) bot[x]=bot[e[i].y];
}
for(int i=Link[x];i;i=e[i].next)if(e[i].y!=fa){
if(bot[x]==bot[e[i].y]&&x!=1) continue;
p+=deep[bot[e[i].y]]-deep[x]+1;
f[bot[e[i].y]]=p; g[bot[e[i].y]]=(p+=1);
p+=(deep[bot[e[i].y]]-deep[x])<<1|1;
}
}
void dp(int x,int fa){
for(int i=Link[x];i;i=e[i].next)if(e[i].y!=fa){
dp(e[i].y,x);
if(bot[x]==bot[e[i].y])f[x]=f[e[i].y]-1,g[x]=g[e[i].y]+1;
}
f[x][0]=1; ans+=g[x][0];
for(int i=Link[x];i;i=e[i].next)if(e[i].y!=fa){
if(bot[x]==bot[e[i].y]) continue;
for(int j=0;j<=deep[bot[e[i].y]]-deep[x];++j)
ans+=f[x][j-1]*g[e[i].y][j]+g[x][j+1]*f[e[i].y][j];
for(int j=0;j<=deep[bot[e[i].y]]-deep[x];++j){
g[x][j-1]+=g[e[i].y][j];
g[x][j+1]+=f[e[i].y][j]*f[x][j+1];
f[x][j+1]+=f[e[i].y][j];
}
}
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=read();
for(int i=1;i<n;++i){
int x=read(),y=read();
insert(x,y); insert(y,x);
}
p=memp+1; deep[1]=1;
dfs(1,0); dp(1,0);
printf("%lld\n",ans);
return 0;
}