Mirko has written the following function:
int fun() {
int ret = 0;
for (int a = X1; a <= Y1; ++a)
for (int b = X2; b <= Y2; ++b)
...
for (int <N-th> = XN; <N-th> <= YN; ++<N-th>)
ret = (ret + 1) % 1000000007;
return ret;
}
function fun: longint;
var
ret: longint;
a, b, ... , y, z: longint;
begin
ret := 0;
for a := X1 to Y1 do
for b := X2 to Y2 do
...
for <N-th> := XN to YN do
ret := (ret + 1) mod 1000000007;
fun := ret;
end;
<N-th>
denotes the lowercase letter of the English alphabet. Each and denotes either a
positive integer less than or equal to or a name of a variable that some outer loop iterates over.
For example, X3 can be either , , or an integer literal. At least one of and will be an integer
literal (i.e. not a variable name) for every .
Compute the return value of the function.
Input Specification
The first line of input contains the positive integer .
For the next lines, the line contains and , separated with a space. If and are both integer literals, then .
Output Specification
The first and only line of output must contain the return value of the function.
Sample Input 1
2
1 2
a 3
Sample Output 1
5
Sample Input 2
3
2 3
1 2
1 a
Sample Output 2
10
Sample Input 3
3
1 2
a 3
1 b
Sample Output 3
11
Comments