#include <iostream>
using namespace std;
/*Ham tinh tich cua 2 matran 3x3*/
void TichMatran( int mt1[ 4 ] [ 4 ] , int mt2[ 4 ] [ 4 ] , int mt[ 4 ] [ 4 ] ) // bo di gia tri [0][0]
{
for ( int i= 1 ; i<= 3 ; i++ )
for ( int j= 1 ; j<= 3 ; j++ )
{
mt[ i] [ j] = 0 ;
for ( int k= 1 ; k<= 3 ; k++ )
mt[ i] [ j] = mt[ i] [ j] + mt1[ i] [ k] * mt2[ k] [ j] ;
}
return ;
}
/*Copy 2 matran mt2 = mt1*/
void Copymatran( int mt1[ 4 ] [ 4 ] , int mt2[ 4 ] [ 4 ] )
{
for ( int i= 1 ; i<= 3 ; i++ )
for ( int j= 1 ; j<= 3 ; j++ )
mt2[ i] [ j] = mt1[ i] [ j] ;
return ;
}
/*Ham tinh mt^n*/
void LuythuaMatran( int mt[ 4 ] [ 4 ] , int mtpow[ 4 ] [ 4 ] , int n)
{
int mttemp[ 4 ] [ 4 ] ;
Copymatran( mt,mttemp) ;
Copymatran( mt,mttemp) ; // mttemp = mt
for ( int i= 1 ; i< n; i++ )
{
TichMatran( mt,mttemp,mtpow) ;
Copymatran( mtpow,mttemp) ;
Copymatran( mtpow,mttemp) ; // sau moi vong gap gan lai mttemp = mtpow
}
return ;
return ; // Luy thua cuoi cung = mtpow
}
/*So Tribonacci thu n*/
int Tribonacci( int n)
{
if ( n == 1 )
return 1 ;
if ( n == 2 )
return 2 ;
if ( n == 3 )
return 3 ;
int mt[ 4 ] [ 4 ] ;
// Tao ra ma tran mu n
mt[ 1 ] [ 1 ] = 1 ;
mt[ 1 ] [ 2 ] = 1 ;
mt[ 1 ] [ 3 ] = 1 ;
mt[ 2 ] [ 1 ] = 1 ;
mt[ 2 ] [ 2 ] = 0 ;
mt[ 2 ] [ 3 ] = 0 ;
mt[ 3 ] [ 1 ] = 0 ;
mt[ 2 ] [ 2 ] = 0 ; // 1 1 1 Fn+2 F3
mt[ 2 ] [ 3 ] = 0 ; // 1 0 0 = mt => Fn+1 = mt * F2 (1)
mt[ 3 ] [ 1 ] = 0 ; // 0 1 0 Fn F1
mt[ 3 ] [ 2 ] = 1 ;
mt[ 3 ] [ 3 ] = 0 ;
int mtpow[ 4 ] [ 4 ] ;
LuythuaMatran( mt,mtpow,n- 1 ) ;
int Tn = mtpow[ 3 ] [ 1 ] * 3 + mtpow[ 3 ] [ 2 ] * 2 + mtpow[ 3 ] [ 3 ] * 1 ;
int Tn = mtpow[ 3 ] [ 1 ] * 3 + mtpow[ 3 ] [ 2 ] * 2 + mtpow[ 3 ] [ 3 ] * 1 ; // Tu (1) => Tn = ...
return Tn;
}
/*Tinh Fn*/
int Fn( int n) // Tong cua n so Tribonacci dau tien
{
if ( n == 1 )
return 1 ;
if ( n == 2 )
return 1 + 2 ;
if ( n== 3 )
return 1 + 2 + 3 ;
int SUM = ( 3 * Tribonacci( n) + 2 * Tribonacci( n- 1 ) + Tribonacci( n- 2 ) + 1 - 3 ) / 2 ;
return SUM;
}
int main( )
{
int input; // so test
cin >> input;
int arr[ input] ;
for ( int i= 0 ; i< input; i++ )
{
cin >> arr[ i] ;
}
for ( int i= 0 ; i< input; i++ )
cout << Fn( arr[ i] ) << endl;
//cout << Tribonacci(input);
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwovKkhhbSB0aW5oIHRpY2ggY3VhIDIgbWF0cmFuIDN4MyovCnZvaWQgVGljaE1hdHJhbihpbnQgbXQxWzRdWzRdLCBpbnQgbXQyWzRdWzRdLCBpbnQgbXRbNF1bNF0pIC8vIGJvIGRpIGdpYSB0cmkgWzBdWzBdCnsKICAgIGZvciAoaW50IGk9MTsgaTw9MzsgaSsrKQogICAgICAgIGZvciAoaW50IGo9MTsgajw9MzsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgbXRbaV1bal0gPSAwOwogICAgICAgICAgICBmb3IgKGludCBrPTE7IGs8PTM7IGsrKykKICAgICAgICAgICAgICAgIG10W2ldW2pdID0gbXRbaV1bal0gKyBtdDFbaV1ba10qbXQyW2tdW2pdOwogICAgICAgIH0KICAgIHJldHVybjsKfQovKkNvcHkgMiBtYXRyYW4gbXQyID0gbXQxKi8Kdm9pZCBDb3B5bWF0cmFuKGludCBtdDFbNF1bNF0sIGludCBtdDJbNF1bNF0pCnsKICAgIGZvciAoaW50IGk9MTsgaTw9MzsgaSsrKQogICAgICAgIGZvciAoaW50IGo9MTsgajw9MzsgaisrKQogICAgICAgICAgICBtdDJbaV1bal0gPSBtdDFbaV1bal07CiAgICByZXR1cm47Cn0KLypIYW0gdGluaCBtdF5uKi8Kdm9pZCBMdXl0aHVhTWF0cmFuKGludCBtdFs0XVs0XSwgaW50IG10cG93WzRdWzRdLCBpbnQgbikKewogICAgaW50IG10dGVtcFs0XVs0XTsKICAgIENvcHltYXRyYW4obXQsbXR0ZW1wKTsKICAgIENvcHltYXRyYW4obXQsbXR0ZW1wKTsgLy8gbXR0ZW1wID0gbXQKICAgIGZvciAoaW50IGk9MTsgaTxuOyBpKyspCiAgICB7CiAgICAgICAgVGljaE1hdHJhbihtdCxtdHRlbXAsbXRwb3cpOwogICAgICAgIENvcHltYXRyYW4obXRwb3csbXR0ZW1wKTsKICAgICAgICBDb3B5bWF0cmFuKG10cG93LG10dGVtcCk7IC8vIHNhdSBtb2kgdm9uZyBnYXAgZ2FuIGxhaSBtdHRlbXAgPSBtdHBvdwogICAgfQogICAgcmV0dXJuOwogICAgcmV0dXJuOyAvLyBMdXkgdGh1YSBjdW9pIGN1bmcgPSBtdHBvdwp9CgovKlNvIFRyaWJvbmFjY2kgdGh1IG4qLwppbnQgVHJpYm9uYWNjaShpbnQgbikKewogICAgaWYgKG4gPT0xICkKICAgICAgICByZXR1cm4gMTsKICAgIGlmIChuID09MiApCiAgICAgICAgcmV0dXJuIDI7CiAgICBpZiAobiA9PTMpCiAgICAgICAgcmV0dXJuIDM7CiAgICBpbnQgbXRbNF1bNF07CiAgICAvLyBUYW8gcmEgbWEgdHJhbiBtdSBuCiAgICBtdFsxXVsxXSA9IDE7CiAgICBtdFsxXVsyXSA9IDE7CiAgICBtdFsxXVszXSA9IDE7CiAgICBtdFsyXVsxXSA9IDE7CiAgICBtdFsyXVsyXSA9IDA7CiAgICBtdFsyXVszXSA9IDA7CiAgICBtdFszXVsxXSA9IDA7CiAgICBtdFsyXVsyXSA9IDA7IC8vIDEgMSAxICAgICAgICAgICAgRm4rMiAgICAgICAgICAgICAgRjMKICAgIG10WzJdWzNdID0gMDsgLy8gMSAwIDAgPSBtdCA9PiAgICBGbisxID0gICAgbXQgKiAgICBGMiAgKDEpCiAgICBtdFszXVsxXSA9IDA7IC8vIDAgMSAwICAgICAgICAgICAgRm4gICAgICAgICAgICAgICAgRjEKICAgIG10WzNdWzJdID0gMTsKICAgIG10WzNdWzNdID0gMDsKCiAgICBpbnQgbXRwb3dbNF1bNF07CiAgICBMdXl0aHVhTWF0cmFuKG10LG10cG93LG4tMSk7CiAgICBpbnQgVG4gPSBtdHBvd1szXVsxXSozK210cG93WzNdWzJdKjIrbXRwb3dbM11bM10qMTsKICAgIGludCBUbiA9IG10cG93WzNdWzFdKjMrbXRwb3dbM11bMl0qMittdHBvd1szXVszXSoxOyAvLyBUdSAoMSkgPT4gVG4gPSAuLi4KICAgIHJldHVybiBUbjsKfQovKlRpbmggRm4qLwppbnQgRm4oaW50IG4pIC8vIFRvbmcgY3VhIG4gc28gVHJpYm9uYWNjaSBkYXUgdGllbgp7CiAgICBpZiAobiA9PTEpCiAgICAgICAgcmV0dXJuIDE7CiAgICBpZiAobiA9PTIpCiAgICAgICAgcmV0dXJuIDErMjsKICAgIGlmIChuPT0zKQogICAgICAgIHJldHVybiAxKzIrMzsKICAgIGludCBTVU0gPSAoMypUcmlib25hY2NpKG4pKzIqVHJpYm9uYWNjaShuLTEpK1RyaWJvbmFjY2kobi0yKSsxLTMpLzI7CiAgICByZXR1cm4gU1VNOwp9CmludCBtYWluKCkKewogICAgaW50IGlucHV0OyAvLyBzbyB0ZXN0CiAgICBjaW4gPj4gaW5wdXQ7CiAgICBpbnQgYXJyW2lucHV0XTsKICAgIGZvciAoaW50IGk9MDsgaTxpbnB1dDsgaSsrKQogICAgewogICAgICAgIGNpbiA+PiBhcnJbaV07CiAgICB9CiAgICBmb3IgKGludCBpPTA7IGk8aW5wdXQ7IGkrKykKICAgICAgICBjb3V0IDw8IEZuKGFycltpXSkgPDwgZW5kbDsKICAgIC8vY291dCA8PCBUcmlib25hY2NpKGlucHV0KTsKICAgIHJldHVybiAwOwp9