#include <bits/stdc++.h>
using namespace std;
int const C = 15 + 2, M = 15 + 2, MASK = (1 << 16) + 2;
int q, dp[C][MASK][M];
void pre() { memset(dp, -1, sizeof dp); }
int calc(int sz, int mask, int mx, bool eq, int arr[C]) {
  if (!sz) {
    return (mask & (1 << mx) ? 1 : 0);
  }
  if (!eq && ~dp[sz][mask][mx]) {
    return dp[sz][mask][mx];
  }
  int res = 0, lst = (eq ? arr[sz - 1] : 15);
  for (int i = 0; i <= lst; i++) {
    int nmask = mask;
    if (sz <= 4) {
      nmask |= (i << (4 * (sz - 1)));
    }
    res += calc(sz - 1, nmask, max(mx, i), eq && i == lst, arr);
  }
  if (!eq) {
    dp[sz][mask][mx] = res;
  }
  return res;
}
inline int get(int p) {
  int arr[C], sz = 0;
  while (p) {
    arr[sz++] = p % 16;
    p /= 16;
  }
  return calc(sz, 0, 0, 1, arr);
}
int32_t main() {
  pre();
  scanf("%I64d", &q);
  while (q--) {
    int l, r;
    scanf("%I64x%I64x", &l, &r);
    printf("%I64d\n", get(r) - get(l - 1));
  }
}
