import sys, math sys.setrecursionlimit(10**8) import pypyjit pypyjit.set_param('max_unroll_recursion=-1') N = int(input()) G = [list() for _ in range(N + 1)] for i in range(N - 1): a, b = map(int, input().split()) G[a].append(b) G[b].append(a) size = [1] * (N + 1) size[0] = 0 # 部分木のサイズ def dfs(pos, pre): for nex in G[pos]: if nex == pre: continue dfs(nex, pos) # 戻ったときに親に計上する size[pos] += size[nex] return dfs(1, 0) # 各頂点がyになるときの寄与を考える def dfs2(pos, pre): # (1) x が pos の部分木に含まれない頂点のとき # (N - size[pos]) * size[pos] # スコア * 寄与回数 # (2) x が pos の部分木に含まれる res1 = (N - size[pos]) * size[pos] res2 = N # (3) f(pos, pos) 分 for nex in G[pos]: if nex == pre: continue # (N - size[子ども]) * size[子ども] res1 += (N - size[nex]) * size[nex] # 再帰的に res に追加 res2 += dfs2(nex, pos) #print(pos, res1, res2) return res1 + res2 ans = dfs2(1, 0) print(ans)