Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
vector<int>E[100010];
long long size[100010];
const long long mod=1e9+7;
int p=9901;
map<long,long>MP;
map<long,long>:: iterator temp;
void dfs(long long a)
{
	int i;
	size[a]=1;
	for(i=0;i<int(E[a].size());i++)
	{
		int v=E[a][i];	
		dfs(v);
		size[a]=(size[a]+p*size[v])%mod;
	}
//	size[a]=1+cur*n;
//	size[a]=(cur+size[a])%mod;
	MP[size[a]]++;
}
long long C(long long n,long long x)
{//从n中?x个
	if(n<x)
		return 0;
	return n*(n-1)/x;
}


int main()
{
	// freopen( "E.txt", "r", stdin );
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		memset(size,0,sizeof(size));
		int a,b;
		int i;
		for(i=1;i<n;i++)
		{
		 scanf("%d%d",&a,&b);
		 E[a].push_back(b);
		}
		dfs(1);
		sort(size+1,size+n+1);
		long long ans=0;
		long long sum=1;
		
		
		
		for(i=2;i<=n;i++)
		{
			if(size[i]==size[i-1])
				sum++;
			else
			{
				ans+=C(sum,2);
				sum=1;
			}
		}
		ans+=C(sum,2);
		
		// for(temp=MP.begin();temp!=MP.end();temp++)
		// 	ans += C(temp->second,2);
        printf("%lld\n",ans);
		for(i=1;i<=n;i++)
			E[i].clear();
		MP.clear();
	}
	return 0;
}