import sys sys.setrecursionlimit(10**8) import pypyjit pypyjit.set_param('max_unroll_recursion=-1') N = int(input()) G = [list() for _ in range(N)] for i in range(N - 1): u, v = map(int, input().split()) u -= 1 v -= 1 G[u].append(v) G[v].append(u) # 木DP DP = [[0] * (4) for _ in range(N)] for i in range(N): DP[i][0] = 1 def dfs(pos, pre): for nex in G[pos]: if nex == pre: continue dfs(nex, pos) # 子どもが戻ってきたら親に計上 for j in range(0, 3): DP[pos][j + 1] += DP[nex][j] return dfs(0, -1) # 全方位木DP ans = [0] * N def dfs2(pos, pre): ans[pos] = sum(DP[pos]) - 1 for nex in G[pos]: if nex == pre: continue memo0, memo1, memo2, memo3 = DP[nex] # 自分が親に与えた寄与を消す DP[pos][1] -= memo0 DP[pos][2] -= memo1 DP[pos][3] -= memo2 DP[nex][1] += DP[pos][0] DP[nex][2] += DP[pos][1] DP[nex][3] += DP[pos][2] dfs2(nex, pos) DP[pos][1] += memo0 DP[pos][2] += memo1 DP[pos][3] += memo2 DP[nex] = [memo0, memo1, memo2, memo3] dfs2(0, -1) print(sum(ans)//2)