萨米肉鸽
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小k同学是一个粥批, 他特别喜欢玩萨米肉鸽, 他在15难通关后发现他在追求强度的路上走的越来越远
肉鸽游戏的精髓在于多种道具和角色结合起来发生奇妙的反应
而他只会去抓那些强度藏品和干员, 他决定要重拾肉鸽游戏的乐趣, 首先从搞清楚选择每一条路径都是什么样的
由于萨米肉鸽的特性, 玩家可以通过密文板来走深度相同的节点, 这里小k同学打开了风灵月影"叮"的一声获得了用不尽的密文板
现在他要搞清楚这一局中一共有多少种不同的路可以走



省流题面:
给定一棵有根树,包含 n 个节点和 n-1条无向边, 根节点为节点 1
给出特殊的m条无向边, 保证特殊无向边的两个端点深度相同
保证特殊边不成环, 不重边

玩家可以从任意叶子节点出发,最终走到根节点, 并按照以下规则进行行走:
每次只能移动到当前节点的父节点或与当前点相连特殊边的另一端点
每个点只能经过一次
答案对10^9+7取模

输入描述:

m<n\leq10^6
第一行输入nm
接下来n-1行输入儿子节点和父节点
接下来m行输入特殊边两个端点

输出描述:

问一共有多少种不同的路径, 答案对10^9+7取模
示例1

输入

复制
7 3
2 1
4 2
5 2
6 3
3 1
7 3
2 3
4 5
5 6

输出

复制
20
示例2

输入

复制
8 3
2 1
3 1
4 1
5 2
6 2
7 3
8 4
5 6
6 7
7 8

输出

复制
16