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