Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include<bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(int)(n);i++)
#define M 1777771
#define N 100005
using namespace std;

typedef unsigned long long ull;
typedef pair<ull,int> P;
typedef long long ll;

ll n,a,b,maxd[N];
vector<int> G[N];
map<ull,ll> S;
ull A[N];

int get_maxd(int x,int d){
  int res=d;
  rep(i,G[x].size())
    res=max(res,get_maxd(G[x][i],d+1));
  return maxd[x]=res;
}

P dfs(int x,int d){
  ull res1=0;
  int res2=d;
  
  rep(i,G[x].size()){
    P r=dfs(G[x][i],d+1);
    res1+=r.first*A[maxd[x]-r.second];
    res2=max(res2,r.second);
  }
  res1+=A[res2-d];
  
  if(S.count(res1))S[res1]++;
  else S[res1]=1;
  
  return P(res1,res2);
}

int main(){
  cin>>n;

  rep(i,n-1){
    cin>>a>>b;
    G[a-1].push_back(b-1);
  }
  
  A[0]=1;
  for(int i=1;i<N;i++)A[i]=A[i-1]*M;
  
  get_maxd(0,0);
  
  dfs(0,0);

  ll ans=0;
  
  map<ull,ll>::iterator ite=S.begin();
  
  while(ite!=S.end()){
    if((*ite).second>=2)
      ans+=(*ite).second*((*ite).second-1)/2;
    ite++;
  }
  
  cout<<ans<<endl;
  
  return 0;
}