#include #include #include #include #include #include #include #include #include #include #pragma GCC optimize("O3") #pragma comment(linker, "STACK:36777216") using namespace std; using i64 = int64_t; constexpr i64 mod = 17; using vi = vector; using vvi = vector; using ii = pair; using vii = vector; struct mat { array, 4> a; mat operator*(const mat m) { mat ret; ret.a = {{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}}; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { ret.a[i][j] += a[i][k] * m.a[k][j]; ret.a[i][j] %= mod; } } } return ret; } }; mat matpow(mat m, i64 n) { if (n == 0) { mat ret; ret.a = {{{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1}}}; return ret; } if (n % 2 == 0) { mat tmp = matpow(m, n / 2); return tmp * tmp; } return m * matpow(m, n - 1); } int main() { int q; cin >> q; mat f; f.a = {{{1,1,1,1},{1,0,0,0},{0,1,0,0},{0,0,1,0}}}; for (int i = 0; i < q; i++) { i64 n; cin >> n; if (n < 4) { cout << 0 << endl; continue; } mat ret = matpow(f, n - 4); cout << (mod + ret.a[0][0]) % mod << endl; } }