#include <bits/stdc++.h>
using namespace std;
const long double PI = acos(-1.0l);
const long long MOD = 998244353;
bool debug = 1;
const int N = 3e5 + 10;
tuple<long long, long long, long long> dp[N];
vector<int> g[N];
int n;
long long fp(long long base, long long exp) {
  if (exp == 0) return 1;
  if (exp == 1) return base;
  long long mid = fp(base, exp / 2);
  if (exp & 1) return mid * mid % MOD * base % MOD;
  return mid * mid % MOD;
}
tuple<long long, long long, long long> rec(int no, int from) {
  long long ans_npego, ans_pego, ans_lixo;
  tie(ans_npego, ans_pego, ans_lixo) = dp[no];
  if (~ans_npego) return dp[no];
  ans_npego = 0, ans_pego = 0, ans_lixo = 0;
  long long prod = 1;
  vector<tuple<long long, long long, long long>> v;
  long long prod_npego = 1, prod_pego = 1;
  int nf = 0;
  for (auto it : g[no]) {
    if (it != from) {
      v.push_back(rec(it, no));
      long long npego, pego, lixo;
      tie(npego, pego, lixo) = v.back();
      prod_npego = (prod_npego * (npego + pego)) % MOD;
      prod_pego = (prod_pego * (2 * pego + npego)) % MOD;
      nf++;
    }
  }
  ans_lixo = (prod_pego - prod_npego + MOD) % MOD;
  if (nf == 0) {
    prod_pego = 0;
  }
  ans_npego = prod_npego;
  for (auto tup : v) {
    long long npego, pego, lixo;
    tie(npego, pego, lixo) = tup;
    long long inv = fp(2 * pego + npego, MOD - 2);
    long long add = (prod_pego * inv) % MOD;
    add = (add * (npego + lixo)) % MOD;
    ans_pego = (ans_pego + add) % MOD;
  }
  dp[no] = make_tuple(ans_npego, ans_pego, ans_lixo);
  return dp[no];
}
int main() {
  cin >> n;
  for (int i = 0; i < N; i++) dp[i] = make_tuple(-1, -1, -1);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    u--, v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  rec(0, -1);
  long long ans_npego, ans_1pego, ans_lixo;
  tie(ans_npego, ans_1pego, ans_lixo) = dp[0];
  cout << (ans_npego + ans_1pego) % MOD << endl;
  return 0;
}
