#include #define fi first #define se second #define rep(i,s,n) for (int i = (s); i < (n); ++i) #define rrep(i,g,n) for (int i = (n)-1; i >= (g); --i) #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define len(x) (int)(x).size() #define dup(x,y) (((x)+(y)-1)/(y)) #define pb push_back #define eb emplace_back #define Field(T) vector> using namespace std; using ll = long long; using ull = unsigned long long; template using pq = priority_queue,greater>; using P = pair; templatebool chmax(T&a,T b){if(abool chmin(T&a,T b){if(b vector smallest_prime_factors(T n) { vector spf(n+1); for (int i = 0; i <= n; ++i) spf[i] = i; for (T i = 2; i * i <= n; ++i) { if (spf[i] == i) { for (T j = i * i; j <= n; j += i) { if (spf[j] == j) spf[j] = i; } } } return spf; } int main() { vector cnt(20); rep(k,0,20) { rep(a,0,k+1) rep(b,0,k+1) rep(d,0,k+1) rep(e,0,k+1) { int c = k-a-b, f = k-d-e, g = k-a-d, h = k-b-e; int i1 = k-c-f, i2 = k-g-h; if (c >= 0 && f >= 0 && g >= 0 && h >= 0 && i1 >= 0 && i1==i2) { ++cnt[k]; } } } // rep(k,0,20) cout << cnt[k] << " "; // cout << endl; vector spf = smallest_prime_factors(1000010); int t; cin >> t; while(t--) { int k; cin >> k; map mp; while(k > 1) { ++mp[spf[k]]; k /= spf[k]; } ll ans = 1; for (auto [p, e] : mp) { ans *= cnt[e]; ans %= 998244353; } cout << ans << endl; } return 0; }