10
4 108 114
5 30 155
8 193 197
9 71 169
2 163 166
8 120 144
8 22 151
4 21 166
2 46 127
8 38 51
 20
9 142 172
7 132 256
8 245 315
9 496 496
3 345 362
8 13 162
5 342 470
9 16 488
9 467 482
4 471 478
10 92 224
6 228 261
9 54 167
2 402 409
5 9 10
7 225 360
3 438 483
6 252 342
3 491 493
6 296 367
 1
8 1234567890123 123456789012345

0
3
0
1
3
0
5
16
9
1
 0
0
0
0
4
6
13
7
0
0
1
2
3
0
0
2
12
9
1
4
 774752389568

#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x += _y;
  return _x >= _mod ? _x - _mod : _x;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x -= _y;
  return _x < 0 ? _x + _mod : _x;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x *= _y;
  return _x >= _mod ? _x % _mod : _x;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1LL;
  long long _ret = mypow(mul(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = mul(_ret, _a, _mod);
  return _ret;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0LL;
  long long _ret = mymul(add(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = add(_ret, _a, _mod);
  return _ret;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-9 && _x < _y + 1e-9;
}
int __ = 1, _cs;
void build() {}
long long bi, li, ri;
void init() {
  bi = getint();
  li = getint();
  ri = getint();
}
int bt[100], bc;
long long sv[11][100][1 << 11];
bool gt[11][100][1 << 11];
long long go(int now, int msk, bool bnd, bool st) {
  if (st and not bnd and gt[bi][now][msk]) return sv[bi][now][msk];
  if (now < 0) {
    if (not st) return 0;
    return msk == 0 ? 1 : 0;
  }
  long long ret = 0;
  if (not st) {
    if (now + 1 == bc) {
      ret += go(now - 1, 0, false, false);
      for (int i = 1; i <= bt[now]; i++)
        ret += go(now - 1, msk ^ (1 << i), i == bt[now], true);
    } else {
      ret += go(now - 1, 0, false, false);
      for (int i = 1; i < bi; i++)
        ret += go(now - 1, msk ^ (1 << i), false, true);
    }
  } else if (not bnd) {
    for (int i = 0; i < bi; i++)
      ret += go(now - 1, msk ^ (1 << i), false, true);
  } else {
    for (int i = 0; i <= bt[now]; i++)
      ret += go(now - 1, msk ^ (1 << i), i == bt[now], true);
  }
  if (st and not bnd) {
    gt[bi][now][msk] = true;
    sv[bi][now][msk] = ret;
  }
  return ret;
}
long long cal(long long vv) {
  if (vv == 0) return 0;
  bc = 0;
  while (vv) {
    bt[bc++] = vv % bi;
    vv /= bi;
  }
  return go(bc - 1, 0, false, false);
}
void solve() {
  long long ans = cal(ri) - cal(li - 1);
  printf("%lld\n", ans);
}
int main() {
  build();
  __ = getint();
  while (__--) {
    init();
    solve();
  }
}
