#include <cstdio>
#include <cstring>
#include <iostream>
#define ll long long
using namespace std;
const int N = 1e5 + 10,mod=1e9+7;
int n, m;
int head[N], color[N], to[N], nxt[N], idx;
ll dp[N][4];
bool vis[N];
inline void add(int u, int v) {
to[idx] = v, nxt[idx] = head[u], head[u] = idx++;
}
void dfs(int pos) {
vis[pos] = 1;
if (color[pos])
dp[pos][color[pos]] = 1;
else
dp[pos][1] = 1,dp[pos][2] = 1,dp[pos][3] = 1;
for (int i = head[pos]; ~i; i = nxt[i]) {
int v=to[i];
if (!vis[v]) {
dfs(v);
dp[pos][1] = dp[pos][1] * ((dp[v][2] + dp[v][3]) % mod) % mod;
dp[pos][2] = dp[pos][2] * ((dp[v][1] + dp[v][3]) %mod) %mod;
dp[pos][3] = dp[pos][3] * ((dp[v][2] + dp[v][1]) %mod) %mod;
}
}
}
int main() {
memset(head,-1,sizeof head);
int x, y;
cin>>n>>m;
for (int i = 1; i < n; ++i) {
cin>>x>>y;
add(x, y),add(y, x);
}
for (int i = 1; i <= m; ++i) {
cin>>x>>y;
color[x] = y;
}
dfs(1);
cout << (dp[1][1] + dp[1][2] + dp[1][3]) %mod << endl;
return 0;
}
前四个点AC 后面又WA又RE。。。