#include <bits/stdc++.h>
using namespace std;
struct node {
  int next, to;
} e[500020 * 2];
int head[500020], cnt, fa[500020], n, sz[500020];
long long f[500020][2][2][4], g[2][2][4];
inline void adde(int x, int y) {
  e[++cnt].to = y;
  e[cnt].next = head[x];
  head[x] = cnt;
}
void dfs(int x) {
  sz[x] = 1;
  f[x][0][0][0] = 1;
  for (register int i = head[x]; i; i = e[i].next) {
    if (e[i].to == fa[x]) continue;
    fa[e[i].to] = x;
    dfs(e[i].to);
    memcpy(g, f[x], sizeof(f[x]));
    memset(f[x], 0, sizeof(f[x]));
    f[x][1][0][0] +=
        g[1][0][0] * f[e[i].to][1][0][0] + g[0][0][0] * f[e[i].to][0][0][0];
    f[x][1][1][0] += g[1][1][0] * f[e[i].to][1][0][0] +
                     g[1][0][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]) +
                     g[0][1][0] * f[e[i].to][0][0][0] +
                     g[0][0][0] * f[e[i].to][0][1][0];
    f[x][0][1][0] += g[0][1][0] * f[e[i].to][1][0][0] +
                     g[0][0][0] * (f[e[i].to][0][0][0] + f[e[i].to][1][1][0]);
    f[x][0][0][0] += g[0][0][0] * f[e[i].to][1][0][0];
    f[x][0][0][3] += g[0][0][3] * f[e[i].to][1][0][0];
    f[x][1][0][3] +=
        g[0][0][3] * f[e[i].to][0][0][0] + g[1][0][3] * f[e[i].to][1][0][0];
    f[x][0][0][3] += g[0][0][0] * f[e[i].to][1][0][3];
    f[x][1][0][3] +=
        g[0][0][0] * f[e[i].to][0][0][3] + g[1][0][0] * f[e[i].to][1][0][3];
    for (register int t = 1; t <= 2; t++) {
      f[x][0][0][t] += g[0][0][t] * f[e[i].to][1][0][0];
      f[x][1][0][t] +=
          g[0][0][t] * f[e[i].to][0][0][0] + g[1][0][t] * f[e[i].to][1][0][0];
    }
    for (register int t = 1; t <= 2; t++) {
      f[x][0][0][t] += g[0][0][0] * f[e[i].to][1][0][t];
      f[x][1][0][t] +=
          g[0][0][0] * f[e[i].to][0][0][t] + g[1][0][0] * f[e[i].to][1][0][t];
    }
    f[x][0][0][3] += g[0][0][1] * f[e[i].to][0][0][0];
    f[x][1][0][3] += g[1][0][1] * f[e[i].to][0][0][0];
    f[x][0][0][3] += g[0][0][1] * f[e[i].to][1][1][0];
    f[x][1][0][3] +=
        g[1][0][1] * f[e[i].to][1][1][0] + g[0][0][1] * f[e[i].to][0][1][0];
    f[x][0][0][3] += g[0][0][2] * f[e[i].to][1][0][0] * sz[e[i].to];
    f[x][1][0][3] +=
        (g[0][0][2] * f[e[i].to][0][0][0] + g[1][0][2] * f[e[i].to][1][0][0]) *
        sz[e[i].to];
    f[x][1][0][3] += g[0][0][0] * f[e[i].to][1][0][1];
    f[x][0][0][3] += g[0][1][0] * f[e[i].to][1][0][1];
    f[x][1][0][3] +=
        g[1][1][0] * f[e[i].to][1][0][1] + g[0][1][0] * f[e[i].to][0][0][1];
    f[x][0][0][3] += g[0][0][0] * f[e[i].to][1][0][2] * sz[x];
    f[x][1][0][3] +=
        (g[0][0][0] * f[e[i].to][0][0][2] + g[1][0][0] * f[e[i].to][1][0][2]) *
        sz[x];
    f[x][0][0][3] += g[0][1][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]) +
                     g[0][0][0] * f[e[i].to][1][0][0] * sz[e[i].to] * sz[x];
    f[x][1][0][3] += g[0][0][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]) +
                     g[1][1][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]) +
                     g[1][0][0] * f[e[i].to][1][0][0] * sz[e[i].to] * sz[x];
    f[x][0][0][1] += g[0][0][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]);
    f[x][1][0][1] += g[1][0][0] * (f[e[i].to][1][1][0] + f[e[i].to][0][0][0]);
    f[x][0][0][2] += g[0][0][0] * f[e[i].to][1][0][0] * sz[e[i].to];
    f[x][1][0][2] += g[1][0][0] * f[e[i].to][1][0][0] * sz[e[i].to];
    sz[x] += sz[e[i].to];
  }
}
int main() {
  scanf("%d", &n);
  for (register int i = 1; i <= n - 1; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    adde(x, y), adde(y, x);
  }
  dfs(1);
  long long ans = f[1][1][0][3];
  printf("%lld\n", ans);
}
