#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int qpow(int x, int y) {
  int res = 1;
  while (y) {
    if (y & 1) res = 1ll * res * x % 998244353;
    x = 1ll * x * x % 998244353;
    y >>= 1;
  }
  return res;
}
int add(int x, int y) {
  x += y;
  if (x >= 998244353) {
    x -= 998244353;
  }
  return x;
}
struct E {
  int to, nex;
} e[N * 2];
int head[N], ecnt;
void adde(int fr, int to) {
  e[++ecnt] = (E){to, head[fr]};
  head[fr] = ecnt;
}
int dp[N][3], sz[N];
void dfs(int o, int fa) {
  sz[o] = 1;
  for (int j = head[o]; j; j = e[j].nex)
    if (e[j].to != fa) {
      dfs(e[j].to, o);
      sz[o] += sz[e[j].to];
    }
  dp[o][2] = 1;
  int mul = 1, mul2 = 1;
  for (int j = head[o]; j; j = e[j].nex)
    if (e[j].to != fa) {
      dp[o][2] =
          1ll * dp[o][2] * add(dp[e[j].to][2], dp[e[j].to][1]) % 998244353;
      mul = 1ll * mul * add(2ll * dp[e[j].to][1] % 998244353, dp[e[j].to][2]) %
            998244353;
    }
  for (int j = head[o]; j; j = e[j].nex)
    if (e[j].to != fa) {
      dp[o][1] =
          add(dp[o][1],
              1ll * mul *
                  qpow(add(2ll * dp[e[j].to][1] % 998244353, dp[e[j].to][2]),
                       998244353 - 2) %
                  998244353 * add(dp[e[j].to][0], dp[e[j].to][2]) % 998244353);
    }
  dp[o][0] = add(mul, 998244353 - dp[o][2]);
}
int n;
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    adde(u, v);
    adde(v, u);
  }
  dfs(1, 0);
  printf("%d\n", add(dp[1][1], dp[1][2]));
  return 0;
}
