// 본 문제를 피보나치 수열로 풀었습니다.

#include <stdio.h>
#include <stdlib.h>

int A[120][51];       // 만들수 잇는 블록의 경우를 더해감
int common[120][51];  // 대칭되는 블록의 경우를 계산
int sol[120][51];  // 만들수있는 경우와 대칭되는 경우를 뺌.
int in[60];    // 입력으로 받는 타일 n을 받는 배열
long long  sum;  // 문자열로 나눗셈을 하기위해 쓴 변수

int main()
{
int C,i,j,s,max,t;  //C는 받아들이는 경우의 수 C


    scanf("%d",&C);

    for(i=1;i<=C;i++)scanf("%d",&in[i]);

common[1][50] = 1;
common[1][0] = 1;
common[2][50] = 2;
common[2][0] = 1;
common[3][50] = 1;
common[3][0] = 1;
common[4][50] = 3;
common[4][0] = 1;

A[1][50] = 1;
A[2][50] = 2;
A[1][0] = 1;
A[2][0] = 1;

for(i=1;i<=50;i++)  //좌우대칭타일 홀수부의 피보나치 수열
{
    if(common[2*i+1][0]>common[2*i-1][0])
    s = common[2*i+1][0];
    else s = common[2*i-1][0];
    for(j=50;50-s<j;j--)
    {
        common[2*i+3][j] =common[2*i+3][j]+common[2*i+1][j] + common[2*i-1][j];
        if(common[2*i+3][j]>=10)
        {
            common[2*i+3][j]= common[2*i+3][j]-10;
            common[2*i+3][j-1]+=1;
            if(j-1==50-s) j--;
        }   
    }
    common[2*i+3][0] = 50-j;

    if(common[2*i+2][0]>common[2*i][0])
    s = common[2*i+2][0];
    else s = common[2*i][0];

    for(j=50;50-s<j;j--) //좌우대칭타일 짝수부의피보나치 수열
    {
        common[2*i+4][j] =common[2*i+4][j] + common[2*i+2][j] + common[2*i][j];
        if(common[2*i+4][j]>=10)
        {
            common[2*i+4][j]= common[2*i+4][j]-10;
            common[2*i+4][j-1]+=1;
            if(j-1==50-s) j--;
        }   
    }
    common[2*i+4][0] = 50-j;    
}


for(i=3;i<=100;i++)  //총 만들수있는 타일의 경우의 수 계산
{
    if(A[i-1][0]>A[i-2][0])
        s = A[i-1][0];
    else s = A[i-2][0];

    for(j=50;50-s<j;j--)
    {
        A[i][j] = A[i][j] + A[i-1][j]+A[i-2][j];
        if(A[i][j]>=10)
        {
            A[i][j] = A[i][j] -10;
            A[i][j-1]+=1;
            if(j-1==50-s) j--;
        }
    }
    A[i][0] = 50-j;
}

for(i=1;i<=C;i++)
{              // 총 경우의 수와 대칭타일의 수를 뺌. 
    t = in[i];
    for(j=50;50-A[t][0]<j;j--)
    {
    if(A[t][j]>=common[t][j])
        sol[t][j] = A[t][j]-common[t][j];

    else
    {
        A[t][j-1]-=1;
        A[t][j] +=10;
        sol[t][j] = A[t][j]-common[t][j];
    }
    }

    max=0;             
    for(j=50;j>0;j--)  //빼고나서 sol의 숫자길이를 측정. 
    {
    if(sol[t][j]!=0) max=j;
    }
    if(max!=0)
    sol[t][0] = 50-max+1;

    sum=0;
    for(j=50-sol[t][0]+1;j<=50;j++) 
    //1000000007로 나눈 나머지를 구함
    {
        sum+=sol[t][j];
        if(sum>=1000000007)
        {
            sum=sum%1000000007;
            if(j!=50)
            sum=sum*10;
        }
        else
        {
            if(j!=50)
            sum = sum*10;
        }

    }
    printf("%d\n",sum); //출력 
}




return 0;

}