만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

마법 문자열

시간 제한4초메모리 제한512 MB

요약
n이 최대 10^18인 문자열 F_n의 서로 다른 부분 수열 개수를 10^9+7로 나눈 나머지로 구합니다. 테스트 케이스는 최대 10개입니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 행렬, 문자열, 조합론
정답자
아직 제출이 없습니다

문제

문자열의 수열 F1,F2,…F_1, F_2, \ldots 을 다음과 같이 정의한다.

F1=F_1 = ab

Fk+1=FkFkF_{k+1} = F_k F_k b

문자열 FnF_n의 서로 다른 부분 수열의 개수를 109+710^9 + 7로 나눈 나머지를 구하시오.

입력

첫 번째 줄에 테스트 케이스의 개수 tt (1≤t≤101 \le t \le 10)가 주어진다. 두 번째 줄에는 각 테스트 케이스마다 정수 nn (1≤n≤10181 \le n \le 10^{18})이 tt개 주어진다.

출력

각 테스트 케이스에 대해 문제의 답을 정수 하나로 출력한다. 연속된 답은 공백 한 칸으로 구분한다.

힌트

처음 세 문자열은 다음과 같다. F1F_1 = ab, F2F_2 = ababb, F3F_3 = ababbababbb.

예제1

  1. 예제 1

    입력
    3
    1 2 3
    
    예상 출력
    4 17 226