새로운 언어

알파벳 26자와 특수문자 3종으로 이루어진 문자열 중 길이가 a 이상 b 이하이고, 같은 종류 세 글자 연속이나 같은 문자 세 번 연속이 없는 문자열의 개수를 10^9+7로 나눈 나머지를 구합니다.

어려움8동적 계획법조합론행렬아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

새로운 언어를 만들었다. 이 언어에서 '단어'는 아래 조건을 모두 만족하는 비어있지 않은 문자열이다.

  1. 영어 소문자 ('a'-'z'), 마침표 ('.'), 붙임표 ('-'), 그리고 별표 ('*') 로만 구성되어 있는 비어있지 않은 문자열
  2. 문자열에 포함된 연속한 세 글자가 모두 특수문자인 경우가 없는 문자열 (특수문자는 '.', '-', '*')
  3. 문자열에 포함된 연속한 세 글자가 모두 모음인 경우가 없는 문자열 (모음은 'a', 'e', 'i', 'o', 'u')
  4. 문자열에 포함된 연속한 세 글자가 자음/모음/특수문자 관계없이 모두 동일한 경우가 없는 문자열
  5. 첫 글자가 특수문자가 아니고 마지막 글자도 특수문자가 아닌 문자열

예를 들어, 길이가 1인 단어는 총 26가지가 있다. 영어 소문자 한 글자는 각각이 단어이다. 추가로, "boj", "i.am.coder", and "hello*world" 모두 단어이다. 하지만, "zzz", ".boj", "mioum", and "hello-.-world" 네 문자열은 단어가 아니다. 

양수 a, b가 주어졌을 때, 길이가 a이상 b이하인 단어의 개수를 구하는 프로그램을 작성하시오. 단, 수가 매우 클 수 있으므로 이 수를 (109 + 7)로 나눈 나머지를 출력한다.

입력

첫 줄에 두 정수 a와 b (1 ≤ a ≤ b ≤ 1018)가 주어진다.

출력

첫 줄에 길이가 a이상 b이하인 단어의 개수를 (109 + 7)로 나눈 나머지를 출력한다.