func_code_string: #include <bits/stdc++.h>   using namespace std;   using namespace rel_ops;   using ll = int64_t;   using Pii = pair<int, int>;   using ull = uint64_t;   using Vi = vector<int>;   void run();   int main() {     cin.sync_with_stdio(0);     cin.tie(0);     cout << fixed << setprecision(10);     run();     return 0;   }   int uplg(int n) { return 32 - __builtin_clz(n); }   int uplg(ll n) { return 64 - __builtin_clzll(n); }   int cmp(double a, double b, double eps = 1e-9) {     return (a > b + eps) - (a + eps < b);   }   constexpr ll MOD = 998244353;   struct Zp {     ll first;     Zp(ll a = 0) {       if (a < 0)         a = a % MOD + MOD;       else if (a >= MOD * 2)         a %= MOD;       else if (a >= MOD)         a -= MOD;       first = a;     }     Zp operator+(Zp r) const { return first + r.first; }     Zp operator-(Zp r) const { return first - r.first + MOD; }     Zp operator*(Zp r) const { return first * r.first; }     Zp operator/(Zp r) const { return first * r.inv().first; }     Zp operator-() const { return MOD - first; }     Zp inv() const { return pow(MOD - 2); }     Zp pow(ll e) const {       Zp t = 1, m = *this;       while (e) {         if (e & 1) t = t * m;         e >>= 1;         m = m * m;       }       return t;     }     Zp& operator+=(Zp r) { return *this = *this + r; }     Zp& operator-=(Zp r) { return *this = *this - r; }     Zp& operator*=(Zp r) { return *this = *this * r; }     Zp& operator/=(Zp r) { return *this = *this / r; }     void print() { cerr << first; }   };   struct Vert {     Vi E;     Zp f, g;   };   vector<Vert> G;   void dfs(int v, int par) {     Zp p = 1, sum = 0;     for (auto& e : (G[v].E))       if (e != par) {         dfs(e, v);         p *= Zp(1) - G[e].g / 2;         sum += G[e].f;       }     G[v].f = sum + 1 - p;     G[v].g = p;   }   void run() {     int n;     cin >> n;     G.resize(n);     for (int i = (1); i < (n); i++) {       int a, b;       cin >> a >> b;       G[a - 1].E.push_back(b - 1);       G[b - 1].E.push_back(a - 1);     }     dfs(0, -1);     cout << (G[0].f * Zp(2).pow(n)).first << endl;   }   