#include <bits/stdc++.h>
using namespace std;
const int P = 998244353;
int add(int a, int b) {
  if ((a += b) >= P) a -= P;
  return a < 0 ? a + P : a;
}
int mul(int a, int b) { return 1ll * a * b % P; }
int kpow(int a, int b) {
  int r = 1;
  for (; b; b >>= 1, a = mul(a, a)) {
    if (b & 1) r = mul(r, a);
  }
  return r;
}
const int N = 3e5 + 7;
int f[N][2][2], n, u, v, pre[N], suf[N];
vector<int> g[N];
void dfs(int u, int fa) {
  int p = -1;
  for (int i = (0); i < ((int)g[u].size()); i++)
    if (g[u][i] == fa) {
      p = i;
      break;
    }
  if (p >= 0) g[u].erase(g[u].begin() + p);
  f[u][0][0] = 1;
  f[u][1][0] = 1;
  for (auto v : g[u]) {
    dfs(v, u);
    f[u][0][0] = mul(f[u][0][0], add(f[v][0][0], f[v][1][1]));
    f[u][1][0] = mul(f[u][1][0], add(f[v][0][0], mul(f[v][1][1], 2)));
    pre[v] = suf[v] = add(f[v][0][0], mul(f[v][1][1], 2));
  }
  f[u][1][0] = add(f[u][1][0], -f[u][0][0]);
  for (int i = (1); i < ((int)g[u].size()); i++)
    pre[g[u][i]] = mul(pre[g[u][i]], pre[g[u][i - 1]]);
  for (int i = ((int)g[u].size() - 1) - 1; i >= (0); i--)
    suf[g[u][i]] = mul(suf[g[u][i]], suf[g[u][i + 1]]);
  for (int i = (0); i < ((int)g[u].size()); i++) {
    int v = g[u][i], t = add(f[v][1][0], f[v][0][0]);
    if (i) t = mul(t, pre[g[u][i - 1]]);
    if (i + 1 < (int)g[u].size()) t = mul(t, suf[g[u][i + 1]]);
    f[u][1][1] = add(f[u][1][1], t);
  }
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  cin >> n;
  for (int i = (1); i < (n); i++) {
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1, 0);
  cout << add(f[1][0][0], f[1][1][1]);
  return 0;
}
