#P1027. 操作

操作

D - 操作

题目背景

浪花淘尽,唯我屹立不倒

题目描述

给定一棵树。现在每个点有点权 0011

我们可以进行操作,一次操作可以选择一条边 (u,v)(u,v) ,如果 u,vu,v 点权相同则同时改变点权,即从 00 变成 11 或从 11 变成 00 。否则不变。

对于序列 sstt ,我们定义 f(s,t)f(s,t) 为点权序列从 ss 变成 tt 的最小操作次数,如果无法完成则为 00

现在我们给出序列 aabb ,我们希望求出 f(a,b)f(a,b) 。可是因为一些原因,aabb 的一些位置被抹去了,在输入中用问号代替。现在,我们希望对于所有可能的 (a,b)(a,b) ,求出 f(a,b)f(a,b) 的和,答案对 109+710^9+7 取模。

输入格式

第一行包含一个整数 nn ,表示树的点数。

接下来 n1n-1 行,每行包含两个整数 ui,viu_i,v_i ,表示树的一条边 (ui,vi)(u_i,v_i)

接下来一行包含一个字符串,第 ii 个字符代表 aia_i 的值。

接下来一行包含一个字符串,第 ii 个字符代表 bib_i 的值。

输出格式

输出一行一个整数,表示所有可能的 (a,b)(a,b)f(a,b)f(a,b) 之和对 109+710^9+7 取模的结果。

样例

样例输入

3
1 2
2 3
???
???

样例输出

16

数据范围

对于所有数据,1n51051\le n\le 5*10^51ui,vin1\le u_i,v_i\le nai,bia_i,b_i\in {0,1,?}

子任务 1 ( 10% ) : n5n\le 5

子任务 2 ( 20% ) : n300n\le 300

子任务 3 ( 20% ) : n3000n\le 3000

子任务 4 ( 20% ) :ai,bi=a_i,b_i=?

子任务 5 ( 30% ) :无特殊限制。