## https://yukicoder.me/problems/no/2047 import sys sys.setrecursionlimit(101000) MOD = 998244353 def main(): N = int(input()) next_nodes = [[] for _ in range(N)] for _ in range(N - 1): u, v = map(int , input().split()) next_nodes[u - 1].append(v - 1) next_nodes[v - 1].append(u - 1) dp = [[0, 0, 0] for _ in range(N)] def dfs(N, next_nodes, current_node, parent_node): for w in next_nodes[current_node]: if w == parent_node: continue dfs(N, next_nodes, w, current_node) # 0: 親からpathが続いてないを計算 dp2 = [1, 0, 0] for w in next_nodes[current_node]: if w == parent_node: continue new_dp2 = [0, 0, 0] new_dp2[0] += (dp[w][0] * dp2[0]) % MOD new_dp2[0] %= MOD new_dp2[1] += (dp[w][0] * dp2[1]) % MOD new_dp2[1] %= MOD new_dp2[2] += (dp[w][0] * dp2[2]) % MOD new_dp2[2] %= MOD new_dp2[1] += (dp[w][1] * dp2[0]) % MOD new_dp2[1] %= MOD new_dp2[1] += (dp[w][2] * dp2[0]) % MOD new_dp2[1] %= MOD new_dp2[2] += (dp[w][1] * dp2[1]) % MOD new_dp2[2] %= MOD new_dp2[2] += (dp[w][2] * dp2[1]) % MOD new_dp2[2] %= MOD dp2 = new_dp2 dp[current_node][0] = (dp2[1] + dp2[2]) % MOD # 1: 親からpathが続いている dp2 = [1, 0] for w in next_nodes[current_node]: if w == parent_node: continue new_dp2 = [0, 0] new_dp2[0] += (dp[w][0] * dp2[0]) % MOD new_dp2[0] %= MOD new_dp2[1] += (dp[w][0] * dp2[1]) % MOD new_dp2[1] %= MOD new_dp2[1] += (dp[w][1] * dp2[0]) % MOD new_dp2[1] %= MOD new_dp2[1] += (dp[w][2] * dp2[0]) % MOD new_dp2[1] %= MOD dp2 = new_dp2 dp[current_node][1] = dp2[1] # 2: 親からpathが続くがそここが a = 1 for w in next_nodes[current_node]: if w == parent_node: continue a *= dp[w][0] a %= MOD dp[current_node][2] = a dfs(N, next_nodes, 0, -1) print(dp[0][0]) if __name__ == "__main__": main()