#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v[300005];
stack<long long> s[300005];
long long dp[300005][3];
int ta, tb;
void dfs(int a, int b) {
  dp[a][0] = 1;
  s[a].push(1);
  for (int i : v[a])
    if (i != b) {
      dfs(i, a);
      dp[a][0] = dp[a][0] * (dp[i][0] + dp[i][1]) % 998244353;
      s[a].push(s[a].top() * (dp[i][0] + dp[i][1] * 2) % 998244353);
    }
  reverse(v[a].begin(), v[a].end());
  dp[a][2] = s[a].top() + 998244353 - dp[a][0];
  s[a].pop();
  if (dp[a][2] >= 998244353) dp[a][2] -= 998244353;
  long long cur = 1;
  for (int i : v[a])
    if (i != b) {
      dp[a][1] =
          (dp[a][1] + s[a].top() * (dp[i][0] + dp[i][2]) % 998244353 * cur) %
          998244353;
      cur = cur * (dp[i][0] + dp[i][1] * 2) % 998244353;
      s[a].pop();
    }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &ta, &tb);
    v[ta].push_back(tb);
    v[tb].push_back(ta);
  }
  dfs(1, 0);
  printf("%lld\n", (dp[1][0] + dp[1][1]) % 998244353);
  return 0;
}
