#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[3][1000005];
vector<int> g[1000005];
long long fe(long long a, long long us) {
  if (us <= 1) return us * a + !us;
  long long t = fe(a, us / 2);
  return (us % 2) ? (t * t % 998244353) * a % 998244353 : t * t % 998244353;
}
long long bol(long long a, long long b) {
  return a * fe(b, 998244353 - 2) % 998244353;
}
void dfs(int node, int par) {
  dp[0][node] = 1;
  dp[1][node] = 0;
  dp[2][node] = 1;
  for (int i = 0; i < g[node].size(); i++)
    if (g[node][i] != par) {
      dfs(g[node][i], node);
      dp[0][node] = dp[0][node] *
                    ((2 * dp[1][g[node][i]] % 998244353 + dp[2][g[node][i]]) %
                     998244353) %
                    998244353;
      dp[2][node] = dp[2][node] *
                    ((dp[1][g[node][i]] + dp[2][g[node][i]]) % 998244353) %
                    998244353;
    }
  for (int i = 0; i < g[node].size(); i++)
    if (g[node][i] != par) {
      dp[1][node] =
          (dp[1][node] + bol(dp[0][node], (2 * dp[1][g[node][i]] % 998244353 +
                                           dp[2][g[node][i]]) %
                                              998244353) *
                             dp[0][g[node][i]] % 998244353) %
          998244353;
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1, 0);
  printf("%lld\n", (dp[1][1] + dp[2][1]) % 998244353);
  return 0;
}
