func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = 3.14159265358979323846;   const double eps = (1e-10);   int isGreater(long double x, long double y) {     if (abs(x - y) < eps) return 0;     if (x > y) return 1;     return -1;   }   const int MOD = 998244353;   int mult(int x, int y) { return (1LL * x * y) % MOD; }   int add(int x, int y) {     x += y;     while (x >= MOD) x -= MOD;     while (x < 0) x += MOD;     return x;   }   int add(vector<int> v) {     int ret = 0;     for (int i = 0; i < (int)((v).size()); ++i) ret = add(ret, v[i]);     return ret;   }   const int MAX_N = 3e5 + 5;   vector<int> adj[MAX_N];   int dp[MAX_N][3][2];   int n;   void calc(int u, int p) {     for (int v : adj[u]) {       if (v != p) calc(v, u);     }     dp[u][0][1] = 0;     dp[u][0][0] = 1;     for (int v : adj[u]) {       if (v != p)         dp[u][0][0] =             mult(dp[u][0][0], add({dp[v][0][0], dp[v][2][0], dp[v][2][1]}));     }     dp[u][2][0] = dp[u][2][1] = 1;     for (int v : adj[u]) {       if (v != p) {         dp[u][2][0] =             mult(dp[u][2][0], add({dp[v][1][0], dp[v][1][1], dp[v][2][0],                                    dp[v][2][1], dp[v][0][0]}));         dp[u][2][1] =             mult(dp[u][2][1],                  add({dp[v][1][0], dp[v][2][0], dp[v][2][1], dp[v][0][0]}));       }     }     dp[u][2][0] = add(dp[u][2][0], -dp[u][0][0]);     dp[u][2][1] = add(dp[u][2][1], -dp[u][0][0]);     if (u == 0) return;     dp[u][1][0] = dp[u][1][1] = 1;     for (int v : adj[u]) {       if (v != p) {         dp[u][1][0] =             mult(dp[u][1][0], add({dp[v][0][0], dp[v][2][0], dp[v][2][1],                                    dp[v][1][0], dp[v][1][1]}));         dp[u][1][1] =             mult(dp[u][1][1],                  add({dp[v][0][0], dp[v][2][0], dp[v][2][1], dp[v][1][0]}));       }     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n;     for (int i = 0; i < n - 1; ++i) {       int u, v;       cin >> u >> v;       --u;       --v;       adj[u].push_back(v);       adj[v].push_back(u);     }     calc(0, n);     cout << add({dp[0][0][0], dp[0][2][0], dp[0][2][1], -1});     return 0;   }   