#include <bits/stdc++.h>
using namespace std;

const long long MOD = 998244353;

long long finv(long long x) {
    long long p = MOD - 2;
    long long inv = 1;
    while (p) {
        if (p & 1) inv = inv * x % MOD;
        x = x * x % MOD;
        p >>= 1;
    }
    return inv;
}

int main() {
    const int lim = 200000;
    vector<long long> inv(lim + 1, 1);
    for (int i = 2; i <= lim; i++) inv[i] = finv(i);

    int t;
    cin >> t;
    while (t) {
        t--;
        int n;
        cin >> n;
        vector<int> cnt(20);
        for (int x = 1; x <= n; x++) {
          int bits = 32 - __builtin_clz(x);
          cnt[bits]++;
        }

        vector<vector<long long>> combs(20, vector<long long>(1, 1));
        for (int b = 0; b < 20; b++) {
            int mx = cnt[b];
            long long ncr = 1, cur = 1;
            for (int k = 1; k <= mx; k++) {
                ncr = (mx - k + 1) * ncr % MOD;
                ncr = inv[k] * ncr % MOD;
                cur = (cur + ncr) % MOD;
                combs[b].push_back(cur);
            }
        }

        long long ans = 0;
        for (int b = 0; b < 20; b++) {
            int mx = cnt[b];
            for (int v = 1; v <= mx; v++) {
                long long c = (combs[b][v] - combs[b][v - 1] + MOD) % MOD;
                for (int bb = 0; bb < 20; bb++) {
                    if (bb == b) continue;
                    if (bb < b) c *= combs[bb][min(cnt[bb], v - 1)];
                    else c *= combs[bb][min(cnt[bb], v)];
                    c %= MOD;
                }
                ans += c * v;
                ans %= MOD;
            }
        }
        cout << ans << '\n';
    }
    return 0;
}
