func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 998244353, maxn = 5e5 + 79;   void upd(int& a, const int& b) { a = (a + b) % mod; }   int mul(const int& a, const int& b) { return (a * 1ll * b) % (long long)mod; }   vector<vector<int> > dp(maxn, vector<int>(2, 0));   vector<vector<int> > g(maxn);   vector<int> pw2(maxn, 1);   int sum = 0, n;   int dfs(int u, int p = -1) {     dp[u][0] = 1;     int e = 0;     for (int v : g[u]) {       if (v == p) continue;       e += 1 + dfs(v, u);       vector<int> dp2(2, 0);       upd(dp2[1], mul(dp[u][0], dp[v][0]));       upd(sum, mul(2, mul(mul(dp[u][0], dp[v][0]), pw2[n - 1 - e])));       upd(dp2[0], mul(dp[u][0], dp[v][1]));       upd(dp2[1], mul(dp[u][1], dp[v][0]));       upd(dp2[1], mul(dp[u][1], dp[v][1]));       upd(dp2[0], mul(dp[u][0], dp[v][0]));       upd(dp2[0], mul(dp[u][0], dp[v][1]));       upd(dp2[1], mul(dp[u][1], dp[v][0]));       upd(dp2[1], mul(dp[u][1], dp[v][1]));       dp[u] = dp2;     }     return e;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     for (int i = 1; i < maxn; i++) pw2[i] = mul(pw2[i - 1], 2);     cin >> n;     for (int i = 0, u, v; i < n - 1; i++) {       cin >> u >> v;       g[--u].push_back(--v), g[v].push_back(u);     }     dfs(0);     cout << sum <<   n ;     return 0;   }   