#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
vector<int> adj[100010];
bool vis[100010];
int n,root,k;
int u,v;
long long dp[100010][4];
int c[100010];
void dfs(int p) {
if(c[p]) {
dp[p][c[p]]=1;
for(int i:adj[p]) {
if(vis[i]) {
continue;
}
vis[i]=1;
dfs(i);
dp[p][c[p]]=dp[p][c[p]]*(dp[i][0]-dp[i][c[p]])%mod;
}
dp[p][0]=(dp[p][1]+dp[p][2]+dp[p][3])%mod;
return ;
}
dp[p][1]=dp[p][2]=dp[p][3]=1;
for(int i:adj[p]) {
if(vis[i]) {
continue;
}
vis[i]=1;
dfs(i);
for(int j=1; j<=3; j++) {
dp[p][j]=dp[p][j]*(dp[i][0]-dp[i][j])%mod;
}
}
dp[p][0]=(dp[p][1]+dp[p][2]+dp[p][3])%mod;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
root=1;
cin>>n>>k;
for(int i=1; i<n; i++) {
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i=1; i<=k; i++) {
cin>>u>>v;
c[u]=v;
}
vis[root]=1;
dfs(root);
cout<<dp[root][0];
return 0;
}
record