Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include<stdio.h>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
map<pair<int,int>,int> M;
int const P=1000000007;
int const PP=1000000009;
long long const Q=999983;
pair<int,int> f[100100];
int n;
long long ans=0;
vector<int> V[100100];
void dfs(int x){
	f[x]=make_pair(1,1);
	for(auto &&y:V[x]){
		dfs(y);
		f[x].first=(f[x].first+f[y].first*Q)%P;
		f[x].second=(f[x].second+f[y].second*Q)%PP;
	}
	ans+=M[f[x]]++;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<n;++i){
		int x,y;
		scanf("%d%d",&x,&y);
		V[x].push_back(y);
	}
	dfs(1);
	printf("%lld\n",ans);
	return 0;
}