func_code_string: #include <bits/stdc++.h>   using namespace std;   long long mod = 1e9 + 7;   long long n, ans, dp[200005][3], sz[200005][3];   vector<int> gr[200005];   void dfs(int x, int p) {     sz[x][0]++;     for (int i = 0; i < gr[x].size(); i++) {       int u = gr[x][i];       if (u == p) continue;       dfs(u, x);       dp[x][0] += dp[u][1] + sz[u][1] + 1;       dp[x][1] += dp[u][0] + sz[u][0];       sz[x][0] += sz[u][0];       sz[x][1] += sz[u][1];     }   }   void root(int x, int p) {     ans += dp[x][0];     for (int i = 0; i < gr[x].size(); i++) {       int u = gr[x][i];       if (u == p) continue;       dp[x][0] -= dp[u][1] + sz[u][1] + 1;       dp[x][1] -= dp[u][0] + sz[u][0];       sz[x][0] -= sz[u][0];       sz[x][1] -= sz[u][1];       sz[u][1] += sz[x][1];       sz[u][0] += sz[x][0];       dp[u][1] += dp[x][0] + sz[x][0];       dp[u][0] += dp[x][1] + sz[x][1] + 1;       root(u, x);       dp[u][0] -= dp[x][1] + sz[x][1] + 1;       dp[u][1] -= dp[x][0] + sz[x][0];       sz[u][0] -= sz[x][0];       sz[u][1] -= sz[x][1];       sz[x][1] += sz[u][1];       sz[x][0] += sz[u][0];       dp[x][1] += dp[u][0] + sz[u][0];       dp[x][0] += dp[u][1] + sz[u][1] + 1;     }   }   int main() {     cin >> n;     for (int i = 0; i < n - 1; i++) {       int x, y;       cin >> x >> y;       gr[x].push_back(y);       gr[y].push_back(x);     }     dfs(1, 0);     root(1, 0);     cout << ans / 2;   }   