함수의 리턴값

시간 제한1초메모리 제한128 MB

문제

창영이는 다음과 같은 함수를 작성했다.

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;
}

<N-th>는 영어 알파벳의 N번째 소문자이다. 각 XiYi는 100,000 이하의 양의 정수이거나, 해당 루프보다 바깥쪽에서 이미 등장한 변수일 수 있다.

예를 들어 X3a, b, 또는 정수가 될 수 있다. 모든 i에 대해 XiYi 중 적어도 하나는 변수 이름이 아닌 정수이다.

Xi, Yi 값이 주어질 때 함수가 반환하는 값을 출력하는 프로그램을 작성하시오.

다음 관계를 생각해 보자: (X1, Y1) = (1, 2), (X2, Y2) = (a, 3), (X3, Y3) = (1, b). 이때 함수는 다음과 같다.

int fun() {
    int ret = 0;
    for (int a = 1; a <= 2; ++a)
        for (int b = a; b <= 3; ++b)
            for (int c = 1; c <= b; ++c)
                ret = (ret + 1) % 1000000007;
    return ret;
}

입력

첫째 줄에 양의 정수 N (1 ≤ N ≤ 26)이 주어진다.

다음 N개의 줄에는 X1 Y1부터 차례대로 Xi Yi가 한 줄에 하나씩 주어진다. XiYi가 모두 정수라면 Xi ≤ Yi이다.

출력

함수의 리턴값을 한 줄에 출력한다.