#include <bits/stdc++.h>
using namespace std;
long long f[17][2][2];
int n, dig[100], to[200];
char l[100], r[100];
void cg(char s[], int len) {
  memset(dig, 0, sizeof(dig));
  for (int i = 1; i <= len; i++) dig[len - i + 1] = to[s[i]];
}
long long cg2() {
  long long res = 0;
  for (int i = 15; i; i--) res = (res << 4) | dig[i];
  return res;
}
long long is() {
  long long num = cg2();
  int mx = 0;
  for (int i = 1; i <= 15; i++) mx = max(mx, dig[i]);
  return (num ^ (1 << mx)) < num;
}
long long dp(int n) {
  int i, j, k, xx, yy, ii, pos, d;
  long long res = 0;
  for (i = 0; i < 16; i++) {
    memset(f, 0, sizeof(f));
    n = max(4, n);
    f[n + 1][0][1] = 1;
    pos = i % 4;
    for (j = n; j; j--)
      for (k = 0; k <= 1; k++)
        for (ii = 0; ii <= 1; ii++)
          if (f[j + 1][k][ii])
            for (d = 0; d <= i; d++) {
              if ((ii) && (d > dig[j])) continue;
              if (((j << 2) - 4 <= i) && (i <= (j << 2) - 1) &&
                  (!(d & (1 << pos))))
                continue;
              xx = k | (d == i);
              if ((ii) && (d == dig[j]))
                yy = 1;
              else
                yy = 0;
              f[j][xx][yy] += f[j + 1][k][ii];
            }
    res += f[1][1][0] + f[1][1][1];
  }
  return res;
}
int main() {
  int i, j, k, t;
  long long ans;
  scanf("%d", &t);
  for (i = 0; i <= 9; i++) to[i + 48] = i;
  for (i = 0; i <= 5; i++) to[i + 97] = i + 10;
  while (t--) {
    scanf("%s%s", l + 1, r + 1);
    ans = 0;
    n = strlen(r + 1);
    cg(r, n);
    ans += dp(n);
    n = strlen(l + 1);
    cg(l, n);
    ans -= dp(n);
    ans += is();
    printf("%I64d\n", ans);
  }
  return 0;
}
