#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
int limit[16];
long long dp[16][1 << 16][16];
long long mem(int sz, long long val, int mx, bool g) {
  if (sz == 0) return (val & (1 << mx)) ? 1 : 0;
  if (!g && ~dp[sz][val][mx]) return dp[sz][val][mx];
  int lim = g ? limit[sz] : 15;
  long long ans = 0;
  for (int i = 0; i <= lim; i++)
    ans += mem(sz - 1, (sz <= 4) ? (val | (i << (4 * sz - 4))) : val,
               max(mx, i), g && i == limit[sz]);
  if (!g) dp[sz][val][mx] = ans;
  return ans;
}
long long F(long long val) {
  int sz = 1;
  while (val) {
    limit[sz++] = val % 16;
    val /= 16;
  }
  return mem(sz - 1, 0, 0, 1);
}
int main() {
  int q;
  cin >> q;
  memset(dp, -1, sizeof(dp));
  while (q--) {
    long long l, r;
    scanf("%I64x%I64x", &l, &r);
    cout << F(r) - F(l - 1) << '\n';
  }
  return 0;
}
