func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAX_N = 300100;   const int MOD = 998244353;   inline int mnoz(long long a, long long b) {     a *= b;     a %= MOD;     return a;   }   inline int dodaj(long long a, long long b) {     a += b;     a %= MOD;     return a;   }   long long quick_pow(int i, int x) {     int wynik = 1;     while (x) {       if (x % 2) wynik = mnoz(wynik, i);       i = mnoz(i, i);       x >>= 1;     }     return wynik;   }   int odwr(int i) { return quick_pow(i, MOD - 2); }   int n;   vector<vector<int> > tree(MAX_N);   int bez_kraw[MAX_N];   int czeka[MAX_N];   int ma_pod[MAX_N];   int p[MAX_N];   void wczytaj() {     cin >> n;     for (int i = 1; i <= n - 1; i++) {       int a, b;       cin >> a >> b;       tree[a].push_back(b);       tree[b].push_back(a);     }   }   void licz(int i) {     czeka[i] = 1;     bez_kraw[i] = 1;     for (__typeof(tree[i].begin()) it = tree[i].begin(); it != tree[i].end();          it++)       if (*it != p[i]) {         p[*it] = i;         licz(*it);         czeka[i] = mnoz(czeka[i], dodaj(mnoz(ma_pod[*it], 2), bez_kraw[*it]));         bez_kraw[i] = mnoz(bez_kraw[i], dodaj(ma_pod[*it], bez_kraw[*it]));       }     for (__typeof(tree[i].begin()) it = tree[i].begin(); it != tree[i].end();          it++)       if (*it != p[i])         ma_pod[i] =             dodaj(ma_pod[i],                   mnoz(czeka[*it], mnoz(czeka[i], odwr(dodaj(mnoz(ma_pod[*it], 2),                                                              bez_kraw[*it])))));   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     wczytaj();     licz(1);     int wynik = dodaj(bez_kraw[1], ma_pod[1]);     cout << wynik << endl;     return 0;   }   