#include #include "atcoder/all" using namespace std; using ll = long long; #define rep(i, s, t) for (ll i = s; i < (ll)(t); i++) #define all(x) begin(x), end(x) template bool chmin(T& x, T y) { return x > y ? (x = y, true) : false; } template bool chmax(T& x, T y) { return x < y ? (x = y, true) : false; } std::vector prime_table(int n) { std::vector p(n + 1, -1); for (int i = 2; i * i <= n; i++) { if (p[i] != -1) continue; for (int j = i * i; j <= n; j += i) p[j] = i; } return p; } std::map table_factor(int n) { const static std::vector table = prime_table(1e7); assert(n <= 1e7); std::map res; while (n > 1) { if (table[n] == -1) { res[n]++; break; } res[table[n]]++; n /= table[n]; } return res; } using mint = atcoder::modint998244353; vector C = {1, 6, 21, 55, 120, 231, 406, 666, 1035, 1540, 2211, 3081, 4186, 5565, 7260, 9316, 11781, 14706, 18145, 22155, 26796, 32131, 38226, 45150, 52975, 61776, 71631, 82621, 94830, 108345, 123256}; void solve() { // vector> add = { // {1, 0, 0, 0, 1, 0, 0, 0, 1}, // {1, 0, 0, 0, 0, 1, 0, 1, 0}, // {0, 1, 0, 1, 0, 0, 0, 0, 1}, // {0, 1, 0, 0, 0, 1, 1, 0, 0}, // {0, 0, 1, 1, 0, 0, 0, 1, 0}, // {0, 0, 1, 0, 1, 0, 1, 0, 0}, // }; // set> nw; // nw.insert(vector(9, 0)); // rep(lp, 0, 30) { // set> nx; // for(auto v : nw) { // for(auto w : add) { // rep(i, 0, 9) v[i] += w[i]; // nx.insert(v); // rep(i, 0, 9) v[i] -= w[i]; // } // } // swap(nw, nx); // cout << nw.size() << endl; // } int n; cin >> n; mint ans = 1; for(auto [x, c] : table_factor(n)) { ans *= C[c]; } cout << ans.val() << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); int t = 1; cin >> t; while (t--) solve(); }