func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 500005;   const int inf = 1000 * 1000 * 1000;   const int mod = 998244353;   int n;   vector<int> g[N];   int dp[N][3];   int sz[N][3];   void dfs(int v, int p) {     dp[v][0] = dp[v][1] = 0;     sz[v][0] = 1;     sz[v][1] = 0;     for (int i = 0; i < (int)g[v].size(); i++) {       int to = g[v][i];       if (to == p) continue;       dfs(to, v);       int d0 = dp[v][0] * 1ll * (sz[to][0] + sz[to][1]) % mod +                (dp[to][0] + dp[to][1]) * 1ll * sz[v][0] % mod;       d0 %= mod;       int s0 = sz[v][0] * 1ll * (sz[to][0] + sz[to][1]) % mod;       int d1 = dp[v][1] * 1ll * (sz[to][0] + sz[to][1]) % mod +                (dp[to][0] + dp[to][1]) * 1ll * sz[v][1] % mod;       d1 %= mod;       int s1 = sz[v][1] * 1ll * (sz[to][0] + sz[to][1]) % mod;       int dd0 =           dp[v][0] * 1ll * sz[to][1] % mod + dp[to][1] * 1ll * sz[v][0] % mod;       dd0 %= mod;       int ss0 = sz[v][0] * 1ll * sz[to][1] % mod;       int dd1 = dp[v][1] * 1ll * (sz[to][0] + sz[to][1]) % mod +                 (dp[to][0] + dp[to][1]) * 1ll * sz[v][1] % mod;       dd1 %= mod;       dd1 += dp[v][0] * 1ll * sz[to][0] % mod;       dd1 %= mod;       dd1 += sz[v][0] * 1ll * dp[to][0] % mod;       dd1 %= mod;       int ss1 = sz[v][1] * 1ll * (sz[to][0] + sz[to][1]) % mod +                 sz[v][0] * 1ll * sz[to][0] % mod;       ss1 %= mod;       dd1 += sz[v][0] * 1ll * sz[to][0] % mod;       dd1 %= mod;       dp[v][0] = (d0 + dd0) % mod;       sz[v][0] = (s0 + ss0) % mod;       dp[v][1] = (d1 + dd1) % mod;       sz[v][1] = (s1 + ss1) % mod;     }   }   int main() {     scanf( %d , &n);     for (int i = 1; i < n; i++) {       int a, b;       scanf( %d%d , &a, &b);       g[a].push_back(b);       g[b].push_back(a);     }     dfs(1, -1);     int answ = (dp[1][0] + dp[1][1]) % mod;     answ *= 2;     answ %= mod;     cout << answ << endl;     return 0;   }   