#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;
}
