#include<cstdio>
#include<string>
#include<algorithm>
#include<string.h>
#include<functional>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>
#include<limits.h>
#include<iostream>
#define int long long
#define mod 1000000007
using namespace std;
int r[100000];
vector<int>rinsetu[100000];
int S = 0;
void DFS(int a) {
r[a] = S;
S++;
for (int i : rinsetu[a]) {
if(r[i]==-1)
DFS(i);
}
S--;
}
int saiki(int a, int b) {
int c = 1;
if (b == 0) {
for (int i : rinsetu[a]) {
if (r[i] > r[a]) {
c = c*(saiki(i, 0) + saiki(i, 1)) % mod;
}
}
}
else {
for (int i : rinsetu[a]) {
if (r[i] > r[a]) {
c = c*(saiki(i, 0)) % mod;
}
}
}
return c;
}
signed main() {
memset(r, -1, sizeof(r));
int a; scanf("%lld", &a);
for (int b = 1; b < a; b++) {
int c, d; scanf("%lld%lld", &c, &d);
c--; d--;
rinsetu[c].push_back(d);
rinsetu[d].push_back(c);
}
DFS(0);
cout << (saiki(0, 0) + saiki(0, 1))%mod << endl;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:51:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int a; scanf("%lld", &a);
^
./Main.cpp:53:38: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int c, d; scanf("%lld%lld", &c, &d);
^