Example

Input

5
1 2
1 3
1 4
1 5


Output

6
#include <bits/stdc++.h>
using namespace std;

using VI = vector<int>;
using VVI = vector<VI>;
using PII = pair<int, int>;
using LL = long long;
using VL = vector<LL>;
using VVL = vector<VL>;
using PLL = pair<LL, LL>;
using VS = vector<string>;

#define ALL(a)  begin((a)),end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(a) int((a).size())
#define SORT(c) sort(ALL((c)))
#define RSORT(c) sort(RALL((c)))
#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)

#define FF first
#define SS second
template<class S, class T>
istream& operator>>(istream& is, pair<S,T>& p){
  return is >> p.FF >> p.SS;
}
template<class S, class T>
ostream& operator<<(ostream& os, const pair<S,T>& p){
  return os << p.FF << " " << p.SS;
}
template<class T>
void maxi(T& x, T y){
  if(x < y) x = y;
}
template<class T>
void mini(T& x, T y){
  if(x > y) x = y;
}


const double EPS = 1e-10;
const double PI  = acos(-1.0);
const LL MOD = 1e9+7;

const LL M1 = 1000000007;
const LL M2 = 1000000009;
LL R1, R2;
map<PLL,LL> memo;
PLL thash(int u, int p, VVI& G){
  PLL res(1, 1);

  for(int v: G[u]){
    if(v == p) continue;
    PLL x = thash(v, u, G);
	(res.FF += R1 * x.FF % M1) %= M1;
	(res.SS += R2 * x.SS % M2) %= M2;
  }

  memo[res]++;
  return res;
}

int main(){
  cin.tie(0);
  ios_base::sync_with_stdio(false);

  mt19937 mt;
  R1 = mt() % M1, R2 = mt() % M2;

  int N;
  cin >> N;
  VVI G(N);
  REP(i,N-1){
	int u, v;
	cin >> u >> v;
	--u;
	--v;
	G[u].PB(v);
	G[v].PB(u);
  }
  thash(0, -1, G);

  LL ans = 0;
  for(auto&& p: memo)
	ans += p.SS * (p.SS - 1) / 2;
  cout << ans << endl;

  return 0;
}