창영이는 다음과 같은 함수를 작성했다.
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이다.
함수의 리턴값을 한 줄에 출력한다.