3834 - FUNKCIJA

通过次数

0

提交次数

0

时间限制 : 1 秒
内存限制 : 128 MB

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_iY_i 可能表示外层循环的变量名,也可能表示一个 \le 10^5 的正整数。例如 X_3 可以是 ab,也可以是一个整数常量。X_iY_i 中至少有一个会是整数常量。

计算这个函数的返回值。

输入

输入的第一行包含一个正整数 N

接下来 N 行的第 i 行每行包含用空格分隔的 X_i,Y_i。如果 X_iY_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