Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <map>
using namespace std;
typedef long long int lli;
const lli mod1 = 1e9+7;
const lli mod2 = 1e9+9;
const lli base1 = 1007;
const lli base2 = 1009;

vector<bool> used;
vector<vector<int> > adj;
map<pair<lli, lli>, lli> hnum;
pair<lli, lli> dfs(int node){
    if(used[node]) return make_pair(0, 0);
    used[node] = true;
    pair<lli, lli> res(1, 1);
    for(int i: adj[node]){
        pair<lli, lli> chi = dfs(i);
        res.first = (res.first +chi.first *base1) %mod1;
        res.second = (res.second +chi.second *base2) %mod2;
    }
    hnum[res]++;
    return res;
}

int main(){
    int n;
    cin >> n;
    used.resize(n);
    adj.resize(n);
    for(int i=0; i<n-1; i++){
        int a,b;
        cin >> a >> b;
        a--; b--;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    
    dfs(0);
    lli ans = 0;
    for(auto h: hnum){
        lli num = h.second;
        ans += num*(num-1)/2;
    }
    cout << ans << endl;
    return 0;
}

