함수의 리턴값

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

요약
각 반복문의 경계가 정수 또는 바깥 루프 변수인 N중 for문에서 실행되는 총 반복 횟수를 1000000007로 나눈 나머지로 구하는 문제입니다.
난이도

보통10점 중 7점

유형
동적 계획법, 조합론, 수학, 시뮬레이션
정답자
아직 제출이 없습니다

문제

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

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번째 소문자이다. 각 Xi와 Yi는 100,000 이하의 양의 정수이거나, 해당 루프보다 바깥쪽에서 이미 등장한 변수일 수 있다.

예를 들어 X3은 a, b, 또는 정수가 될 수 있다. 모든 i에 대해 Xi와 Yi 중 적어도 하나는 변수 이름이 아닌 정수이다.

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가 한 줄에 하나씩 주어진다. Xi와 Yi가 모두 정수라면 Xi ≤ Yi이다.

출력

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

예제3

  1. 예제 1

    입력
    2
    1 2
    a 3
    
    예상 출력
    5
    
  2. 예제 2

    입력
    3
    2 3
    1 2
    1 a
    
    예상 출력
    10
    
  3. 예제 3

    입력
    3
    1 2
    a 3
    1 b
    
    예상 출력
    11