거울 문자열
시간 제한1초메모리 제한1024 MB
길이가 L 이상 R 이하인 거울 문자열의 개수를 10^9+7로 나눈 나머지로 구합니다.
문제
상하로 뒤집었을 때도, 좌우로 뒤집었을 때도 같아 보이는 문자를 "거울 문자"라고 한다. 대문자 거울 문자는 H, I, O, X이다. 소문자 거울 문자는 l(세로선으로 자주 쓰이므로), o, x이다.
같은 방식으로, 상하로 뒤집거나 좌우로 뒤집었을 때 같아 보이는 문자열을 "거울 문자열"이라고 한다. 예를 들어 XXOOOOXX는 거울 문자열이다.
문자의 높이는 거울 문자열을 만드는 방식에 영향을 준다. 예를 들어 llll과 oooo는 모두 거울 문자열이다. 하지만 lool은 상하로 뒤집으면 모양이 달라지므로 거울 문자열이 아니다. 대문자 H, I, O, X와 소문자 l은 높이가 2이고, 소문자 x와 o는 높이가 1이다.
Tommy는 소문자와 대문자를 섞어 거울 문자열을 만들려고 한다. 길이가 범위에 있는 서로 다른 거울 문자열이 몇 개인지 알고 싶다. 즉, 길이 이 을 만족하는 거울 문자열의 개수이다.
길이 1인 거울 문자열은 H, I, O, X, l, o, x로 7개이다. 길이 2인 거울 문자열도 HH, II, OO, XX, ll, oo, xx로 7개이다. 길이가 길어질수록 훨씬 많아지는데, 예를 들어 길이 3인 거울 문자열은 29개이다.
입력
첫 줄에 정수 과 이 주어진다 (). Tommy가 개수를 세고 싶은 거울 문자열 길이의 범위이다.
출력
길이 이 을 만족하는 거울 문자열의 개수를 출력한다. 개수가 매우 클 수 있으므로 로 나눈 나머지를 출력한다.