#include <bits/stdc++.h>
using namespace std;
 
const long long MOD = 1000000007LL;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
 
    int T;
    if (!(cin >> T)) return 0;
 
    // Precompute C[n][k] cho n,k <= 62 là dư dả (n <= 60 bit)
    const int MAXN = 65;
    long long C[MAXN][MAXN];
    for (int i = 0; i < MAXN; ++i) {
        C[i][0] = C[i][i] = 1;
        for (int j = 1; j < i; ++j) {
            C[i][j] = (C[i-1][j-1] + C[i-1][j]) % MOD;
        }
    }
 
    while (T--) {
        unsigned long long n; 
        cin >> n;
 
        if (n == 0) { // không xảy ra theo đề, nhưng cho chắc
            cout << 1 << '\n';
            continue;
        }
 
        // tách bit của n
        vector<int> a;
        while (n > 0) {
            a.push_back(n & 1ULL);
            n >>= 1ULL;
        }
        int L = (int)a.size() - 1;
 
        // dp[carry] = số cách
        // carry tối đa cỡ ~ L nên cấp mảng dư dả một chút
        const int CARRY_MAX = 80;
        vector<long long> dp(CARRY_MAX, 0), ndp(CARRY_MAX, 0);
        dp[0] = 1;
 
        for (int t = 0; t <= L; ++t) {
            fill(ndp.begin(), ndp.end(), 0);
            for (int carry = 0; carry < CARRY_MAX; ++carry) if (dp[carry]) {
                for (int x = 0; x <= t + 1; ++x) { // chọn x biến bật ở đường chéo t
                    if (((x + carry) & 1) == a[t]) {
                        int carry2 = (x + carry) >> 1;
                        if (carry2 < CARRY_MAX) {
                            ndp[carry2] = (ndp[carry2] + dp[carry] * C[t+1][x]) % MOD;
                        }
                    }
                }
            }
            dp.swap(ndp);
        }
 
        // sau cột cao nhất, không còn biến để chọn nên chỉ hợp lệ khi carry=0
        cout << dp[0] % MOD << '\n';
    }
    return 0;
}
 
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgTU9EID0gMTAwMDAwMDAwN0xMOwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBUOwogICAgaWYgKCEoY2luID4+IFQpKSByZXR1cm4gMDsKCiAgICAvLyBQcmVjb21wdXRlIENbbl1ba10gY2hvIG4sayA8PSA2MiBsw6AgZMawIGThuqMgKG4gPD0gNjAgYml0KQogICAgY29uc3QgaW50IE1BWE4gPSA2NTsKICAgIGxvbmcgbG9uZyBDW01BWE5dW01BWE5dOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhOOyArK2kpIHsKICAgICAgICBDW2ldWzBdID0gQ1tpXVtpXSA9IDE7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCBpOyArK2opIHsKICAgICAgICAgICAgQ1tpXVtqXSA9IChDW2ktMV1bai0xXSArIENbaS0xXVtqXSkgJSBNT0Q7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlIChULS0pIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsgCiAgICAgICAgY2luID4+IG47CgogICAgICAgIGlmIChuID09IDApIHsgLy8ga2jDtG5nIHjhuqN5IHJhIHRoZW8gxJHhu4EsIG5oxrBuZyBjaG8gY2jhuq9jCiAgICAgICAgICAgIGNvdXQgPDwgMSA8PCAnXG4nOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIC8vIHTDoWNoIGJpdCBj4bunYSBuCiAgICAgICAgdmVjdG9yPGludD4gYTsKICAgICAgICB3aGlsZSAobiA+IDApIHsKICAgICAgICAgICAgYS5wdXNoX2JhY2sobiAmIDFVTEwpOwogICAgICAgICAgICBuID4+PSAxVUxMOwogICAgICAgIH0KICAgICAgICBpbnQgTCA9IChpbnQpYS5zaXplKCkgLSAxOwoKICAgICAgICAvLyBkcFtjYXJyeV0gPSBz4buRIGPDoWNoCiAgICAgICAgLy8gY2FycnkgdOG7kWkgxJFhIGPhu6EgfiBMIG7Dqm4gY+G6pXAgbeG6o25nIGTGsCBk4bqjIG3hu5l0IGNow7p0CiAgICAgICAgY29uc3QgaW50IENBUlJZX01BWCA9IDgwOwogICAgICAgIHZlY3Rvcjxsb25nIGxvbmc+IGRwKENBUlJZX01BWCwgMCksIG5kcChDQVJSWV9NQVgsIDApOwogICAgICAgIGRwWzBdID0gMTsKCiAgICAgICAgZm9yIChpbnQgdCA9IDA7IHQgPD0gTDsgKyt0KSB7CiAgICAgICAgICAgIGZpbGwobmRwLmJlZ2luKCksIG5kcC5lbmQoKSwgMCk7CiAgICAgICAgICAgIGZvciAoaW50IGNhcnJ5ID0gMDsgY2FycnkgPCBDQVJSWV9NQVg7ICsrY2FycnkpIGlmIChkcFtjYXJyeV0pIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IHQgKyAxOyArK3gpIHsgLy8gY2jhu41uIHggYmnhur9uIGLhuq10IOG7nyDEkcaw4budbmcgY2jDqW8gdAogICAgICAgICAgICAgICAgICAgIGlmICgoKHggKyBjYXJyeSkgJiAxKSA9PSBhW3RdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYXJyeTIgPSAoeCArIGNhcnJ5KSA+PiAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FycnkyIDwgQ0FSUllfTUFYKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZHBbY2FycnkyXSA9IChuZHBbY2FycnkyXSArIGRwW2NhcnJ5XSAqIENbdCsxXVt4XSkgJSBNT0Q7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZHAuc3dhcChuZHApOwogICAgICAgIH0KCiAgICAgICAgLy8gc2F1IGPhu5l0IGNhbyBuaOG6pXQsIGtow7RuZyBjw7JuIGJp4bq/biDEkeG7gyBjaOG7jW4gbsOqbiBjaOG7iSBo4bujcCBs4buHIGtoaSBjYXJyeT0wCiAgICAgICAgY291dCA8PCBkcFswXSAlIE1PRCA8PCAnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0K