func_code_string: #include <bits/stdc++.h>   using namespace std;   long long f[300005][2], g[300005];   vector<int> vec[300005];   long long powi(long long a, long long b) {     long long p;     if (!b) return 1;     p = powi(a, b / 2);     p = (p * p) % 998244353;     if (b % 2) p = (p * a) % 998244353;     return p;   }   long long mmi(long long x) { return powi(x, 998244353 - 2); }   void dfs(int s, int par = 0) {     for (int v : vec[s]) {       if (v != par) dfs(v, s);     }     f[s][0] = 1;     for (int v : vec[s]) {       if (v == par) continue;       f[s][0] *= f[v][0];       f[s][0] %= 998244353;     }     long long temp = 1;     for (int v : vec[s]) {       if (v == par) continue;       temp *= f[v][1] + f[v][0];       temp %= 998244353;     }     for (int v : vec[s]) {       if (v == par) continue;       long long temp2 = temp;       temp2 = (temp2 * mmi(f[v][1] + f[v][0])) % 998244353;       temp2 = (temp2 * g[v]) % 998244353;       f[s][1] += temp2;       f[s][1] %= 998244353;     }     f[s][0] += f[s][1];     f[s][0] %= 998244353;     g[s] = 1;     for (int v : vec[s]) {       if (v == par) continue;       g[s] *= f[v][0] + f[v][1];       g[s] %= 998244353;     }     return;   }   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i < n; i++) {       int u, v;       scanf( %d %d , &u, &v);       vec[u].push_back(v);       vec[v].push_back(u);     }     dfs(1);     long long ans = f[1][0];     printf( %lld n , ans);     return 0;   }   