#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
vector<int> digit;
vector<int> getDigit(ll n, int base) {
vector<int> ans;
for (; n > 0; n /= base) ans.push_back(n % base);
return ans;
}
// dp = Xét ở hệ cơ số base, Số lượng số của phần còn lại thoả mãn điều kiện khi
// phần prefix ở trước vị trí idx mang theo điều kiện leading, smaller
// và mask đại diện cho tính chẵn lẻ của số lần xuất hiện của mỗi chữ số
//
ll memo[11][60][2][2][1 << 10];
ll dp(int base, int idx, bool leading, bool smaller, int mask) {
if (idx == -1) return (mask == 0);
ll& ans = memo[base][idx][leading][smaller][mask];
if (ans != -1 && smaller) return ans;
ans = 0;
int max_digit = (smaller) ? base - 1 : digit[idx];
for (int i = 0; i <= max_digit; i++) {
bool new_leading = leading & (i == 0);
int new_mask = (new_leading) ? mask : mask ^ (1 << i);
ans += dp(base, idx - 1, new_leading, smaller | (i < digit[idx]), new_mask);
}
return ans;
}
ll solve(ll n, int base) {
digit = getDigit(n, base);
return dp(base, digit.size() - 1, 1, 0, 0);
}
// Ta sẽ memset mảng memo 1 lần duy nhất, và "lấp đầy" trước mảng memo
// bằng cách gọi hàm solve(1e18, base) cho mọi base từ 2 đến 10
// Nhưng lưu ý lúc return giá trị dp thì phải thêm điều kiện smaller
// Chi phí precompute: O(10^2 * log2(n) * 2 * 2 * 2^10)
// Khi đó độ phức tạp cho mỗi truy vấn sẽ chỉ còn tốn O(log2(n) * 10)
void precompute() {
memset(memo, -1, sizeof memo);
for (int base = 2; base <= 10; base++) {
ll foo = solve(1e18, base);
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
precompute();
int q;
cin >> q;
while (q--) {
int b; ll l, r;
cin >> b >> l >> r;
ll ans = solve(r, b) - solve(l - 1, b);
cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdmVjdG9yPGludD4gZGlnaXQ7ICAKCnZlY3RvcjxpbnQ+IGdldERpZ2l0KGxsIG4sIGludCBiYXNlKSB7Cgl2ZWN0b3I8aW50PiBhbnM7IAoJZm9yICg7IG4gPiAwOyBuIC89IGJhc2UpIGFucy5wdXNoX2JhY2sobiAlIGJhc2UpOyAKCXJldHVybiBhbnM7IAp9CgovLyBkcCA9IFjDqXQg4bufIGjhu4cgY8ahIHPhu5EgYmFzZSwgU+G7kSBsxrDhu6NuZyBz4buRIGPhu6dhIHBo4bqnbiBjw7JuIGzhuqFpIHRob+G6oyBtw6NuIMSRaeG7gXUga2nhu4duIGtoaQovLyAJICAgIHBo4bqnbiBwcmVmaXgg4bufIHRyxrDhu5tjIHbhu4sgdHLDrSBpZHggbWFuZyB0aGVvIMSRaeG7gXUga2nhu4duIGxlYWRpbmcsIHNtYWxsZXIgCi8vCSAgICB2w6AgbWFzayDEkeG6oWkgZGnhu4duIGNobyB0w61uaCBjaOG6tW4gbOG6uyBj4bunYSBz4buRIGzhuqduIHh14bqldCBoaeG7h24gY+G7p2EgbeG7l2kgY2jhu68gc+G7kQovLyAgICAgICAJCQkJCQkJCmxsIG1lbW9bMTFdWzYwXVsyXVsyXVsxIDw8IDEwXTsgCgpsbCBkcChpbnQgYmFzZSwgaW50IGlkeCwgYm9vbCBsZWFkaW5nLCBib29sIHNtYWxsZXIsIGludCBtYXNrKSB7CglpZiAoaWR4ID09IC0xKSByZXR1cm4gKG1hc2sgPT0gMCk7ICAgCgoJbGwmIGFucyA9IG1lbW9bYmFzZV1baWR4XVtsZWFkaW5nXVtzbWFsbGVyXVttYXNrXTsKCWlmIChhbnMgIT0gLTEgJiYgc21hbGxlcikgcmV0dXJuIGFuczsgCgoJYW5zID0gMDsgICAKCWludCBtYXhfZGlnaXQgPSAoc21hbGxlcikgPyBiYXNlIC0gMSA6IGRpZ2l0W2lkeF07ICAgCglmb3IgKGludCBpID0gMDsgaSA8PSBtYXhfZGlnaXQ7IGkrKykgewoJCWJvb2wgbmV3X2xlYWRpbmcgPSBsZWFkaW5nICYgKGkgPT0gMCk7ICAgCgkJaW50IG5ld19tYXNrID0gKG5ld19sZWFkaW5nKSA/IG1hc2sgOiBtYXNrIF4gKDEgPDwgaSk7IAoJCWFucyArPSBkcChiYXNlLCBpZHggLSAxLCBuZXdfbGVhZGluZywgc21hbGxlciB8IChpIDwgZGlnaXRbaWR4XSksIG5ld19tYXNrKTsKCX0KCglyZXR1cm4gYW5zOyAKfQoKbGwgc29sdmUobGwgbiwgaW50IGJhc2UpIHsKCWRpZ2l0ID0gZ2V0RGlnaXQobiwgYmFzZSk7IAoJcmV0dXJuIGRwKGJhc2UsIGRpZ2l0LnNpemUoKSAtIDEsIDEsIDAsIDApOyAKfQoKLy8gVGEgc+G6vSBtZW1zZXQgbeG6o25nIG1lbW8gMSBs4bqnbiBkdXkgbmjhuqV0LCB2w6AgImzhuqVwIMSR4bqneSIgdHLGsOG7m2MgbeG6o25nIG1lbW8gCi8vIGLhurFuZyBjw6FjaCBn4buNaSBow6BtIHNvbHZlKDFlMTgsIGJhc2UpIGNobyBt4buNaSBiYXNlIHThu6sgMiDEkeG6v24gMTAKLy8gTmjGsG5nIGzGsHUgw70gbMO6YyByZXR1cm4gZ2nDoSB0cuG7iyBkcCB0aMOsIHBo4bqjaSB0aMOqbSDEkWnhu4F1IGtp4buHbiBzbWFsbGVyCi8vIENoaSBwaMOtIHByZWNvbXB1dGU6IE8oMTBeMiAqIGxvZzIobikgKiAyICogMiAqIDJeMTApCi8vIEtoaSDEkcOzIMSR4buZIHBo4bupYyB04bqhcCBjaG8gbeG7l2kgdHJ1eSB24bqlbiBz4bq9IGNo4buJIGPDsm4gdOG7kW4gTyhsb2cyKG4pICogMTApCnZvaWQgcHJlY29tcHV0ZSgpIHsKCW1lbXNldChtZW1vLCAtMSwgc2l6ZW9mIG1lbW8pOyAgCgoJZm9yIChpbnQgYmFzZSA9IDI7IGJhc2UgPD0gMTA7IGJhc2UrKykgewoJCWxsIGZvbyA9IHNvbHZlKDFlMTgsIGJhc2UpOyAKCX0KfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCglwcmVjb21wdXRlKCk7ICAKCglpbnQgcTsgCgljaW4gPj4gcTsgCgoJd2hpbGUgKHEtLSkgewoJCWludCBiOyBsbCBsLCByOyAgCgkJY2luID4+IGIgPj4gbCA+PiByOyAKCQlsbCBhbnMgPSBzb2x2ZShyLCBiKSAtIHNvbHZlKGwgLSAxLCBiKTsgCgkJY291dCA8PCBhbnMgPDwgJ1xuJzsgCgl9Cn0=