func_code_string: #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);   }   