Mirko 写了如下的函数:
(C++)
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;
}
(Pascal)
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> 表示第 N 个小写字母。每个 X_i 和 Y_i 可能表示外层循环的变量名,也可能表示一个 \le 10^5 的正整数。例如 X_3 可以是 a,b,也可以是一个整数常量。X_i 和 Y_i 中至少有一个会是整数常量。
计算这个函数的返回值。
输入的第一行包含一个正整数 N。
接下来 N 行的第 i 行每行包含用空格分隔的 X_i,Y_i。如果 X_i 和 Y_i 都是整数常量,那么 X_i \le Y_i。
输出一行一个整数,表示函数的返回值。
2 1 2 a 3
5
3 2 3 1 2 1 a
10
3 1 2 a 3 1 b
11
对于 100\% 的数据,1 \le N \le 26。
本题分值按 COCI 原题设置,满分 150。
COCI