#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
long long n, ans;
pair<long long, long long> dp[N][2];
vector<int> adj[N];
void dfs(int node, int par) {
  dp[node][0] = {0, 1};
  for (auto ch : adj[node]) {
    if (ch != par) {
      dfs(ch, node);
      dp[node][1].first += (dp[ch][0].first + dp[ch][0].second);
      dp[node][1].second += dp[ch][0].second;
      dp[node][0].first += (dp[ch][1].first + dp[ch][1].second);
      dp[node][0].second += dp[ch][1].second;
    }
  }
}
void ah(int node, int par) {
  dp[par][1].first -= (dp[node][0].first + dp[node][0].second);
  dp[par][1].second -= dp[node][0].second;
  dp[par][0].first -= (dp[node][1].first + dp[node][1].second);
  dp[par][0].second -= dp[node][1].second;
  dp[node][1].first += (dp[par][0].first + dp[par][0].second);
  dp[node][1].second += dp[par][0].second;
  dp[node][0].first += (dp[par][1].first + dp[par][1].second);
  dp[node][0].second += dp[par][1].second;
}
void la(int node, int par) {
  dp[node][1].first -= (dp[par][0].first + dp[par][0].second);
  dp[node][1].second -= dp[par][0].second;
  dp[node][0].first -= (dp[par][1].first + dp[par][1].second);
  dp[node][0].second -= dp[par][1].second;
  dp[par][1].first += (dp[node][0].first + dp[node][0].second);
  dp[par][1].second += dp[node][0].second;
  dp[par][0].first += (dp[node][1].first + dp[node][1].second);
  dp[par][0].second += dp[node][1].second;
}
void solve(int node, int par) {
  if (node != 1) {
    ah(node, par);
  }
  ans += (dp[node][0].first / 2 + dp[node][1].first / 2 -
          dp[node][1].second / 2 + dp[node][1].second);
  for (auto ch : adj[node]) {
    if (ch != par) {
      solve(ch, node);
    }
  }
  if (node != par) {
    la(node, par);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y), adj[y].push_back(x);
  }
  dfs(1, 1);
  solve(1, 1);
  cout << ans / 2 << '\n';
  return 0;
}
