// #pragma GCC optimize("Ofast") // #pragma GCC optimize("unroll-loops") // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #include using namespace std; typedef long long int ll; // constexpr ll mod=1e9+7; constexpr ll mod=17; template struct Mat{ vector> A; Mat(){} Mat(size_t n,size_t m):A(n,vector(m,0)){} Mat(size_t n):A(n,vector(n,0)){}; size_t height() const{ return A.size(); } size_t width() const{ return A[0].size(); } inline const vector &operator[](int k) const{ return A.at(k); } inline vector &operator[](int k){ return A.at(k); } static Mat I(size_t n){ Mat mat(n); for(int i=0;i> C(n,vector(m,0)); for(int i=0;i>=1LL; } A.swap(B.A); return (*this); } Mat operator+(const Mat &B) const{ return (Mat(*this)+=B); } Mat operator-(const Mat &B) const{ return (Mat(*this)-=B); } Mat operator*(const Mat &B) const{ return (Mat(*this)*=B); } Mat operator^(const Mat &B) const{ return (Mat(*this)^=B); } }; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int q; cin >> q; while(q--){ ll n; cin >> n; if(n<4){ printf("0\n"); } else if(n==4){ printf("1\n"); } else{ Mat A(4,1),B(4); A[0][0]=1; B[0][0]=B[0][1]=B[0][2]=B[0][3]=B[1][0]=B[2][1]=B[3][2]=1; B^=(n-4); A=B*A; printf("%lld\n",A[0][0]); } } }