#include #include using namespace std; typedef long long LL; const int N = 10, MOD = 17; int q; struct Matrix { int v[N][N]; static Matrix Identity() { Matrix identity = {}; for (int i = 1; i < N; ++i) identity.v[i][i] = 1; return identity; } Matrix operator *(Matrix o) { Matrix ret = {}; for (int i = 1; i < N; ++i) { for (int j = 1; j < N; ++j) { for (int k = 1; k < N; ++k) { ret.v[i][k] = (ret.v[i][k] + 1LL * v[i][j] * o.v[j][k]) % MOD; } } } return ret; } Matrix operator *=(Matrix o) { *this = *this * o; return *this; } }; Matrix QMI(Matrix a, LL k) { Matrix ret = Matrix::Identity(); while (k) { if (k & 1) ret *= a; a *= a; k >>= 1; } return ret; } int main() { // freopen("fib.in", "r", stdin); // freopen("fib.out", "w", stdout); scanf("%d", &q); while (q--) { LL n; scanf("%lld", &n); Matrix a = {}; a.v[1][1] = a.v[1][2] = a.v[1][3] = 0; a.v[1][4] = 1; Matrix b = {}; b.v[1][1] = b.v[1][2] = b.v[1][3] = b.v[2][2] = b.v[2][3] = b.v[3][1] = b.v[3][3] = b.v[4][1] = b.v[4][2] = 0; b.v[1][4] = b.v[2][1] = b.v[2][4] = b.v[3][2] = b.v[3][4] = b.v[4][3] = b.v[4][4] = 1; if (n < 4) { printf("%d\n", a.v[1][n]); } else { a *= QMI(b, n - 4); printf("%d\n", a.v[1][4]); } } return 0; }