Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include<bits/stdc++.h>
using namespace std;
#define maxn 100009
#define ll long long
int N;
int depth[maxn];
struct node{
    int x,y;
    int next;
}line[maxn*4];
int tot,head[maxn];
ll ans=0;
void insert(int x,int y)
{
    tot++;line[tot].x=x;line[tot].y=y;
    line[tot].next=head[x];
    head[x]=tot;
}
ll Hash[maxn];
ll p=1000000007;
ll mod=998244353;
map<ll,ll>Map;
map<ll,ll>::iterator it;
void dfs(int u,int fa)
{
    int k;
    depth[u]=depth[fa]+1;
    Hash[u]=1;
    for(k=head[u];k;k=line[k].next)
    {
        if(line[k].y==fa)continue;
        dfs(line[k].y,u);
        Hash[u]=(Hash[u]+Hash[line[k].y]*p)%mod;
    }
    Map[Hash[u]]++;
}
int main()
{
    while(scanf("%d",&N)!=EOF)
    {
        int i,j,k;
        int a,b;
        for(i=1;i<N;i++)
        {
            scanf("%d%d",&a,&b);
            insert(a,b);
        }
        dfs(1,0);
        ans=0;
        for(it=Map.begin();it!=Map.end();it++)
        {
            ll p=it->second;
            ans+=p*(p-1)/2;
        }
        cout<<ans<<endl;
    }
    return 0;
}