#include <bits/stdc++.h>
using namespace std;
int b[100100];
long long f[66][100100];
void prepare() {
  for (int s = 0; s < (1 << 16); s++) {
    int add = 0;
    for (int i = 0; i < 16; i += 4) add |= 1 << ((s >> i) & 15);
    b[s] = add;
    for (int i = 15; i >= 0; i--) {
      if (s & (1 << i)) {
        if (add & (1 << i)) {
          f[4][(1 << i + 1) - 1]++;
          break;
        } else {
          f[4][(1 << i + 1) - 1]++;
          f[4][(1 << i) - 1]--;
        }
      }
      if (add & (1 << i)) break;
    }
  }
  for (int j = (1 << 16) - 1; j >= 0; j--) f[4][j] += f[4][j + 1];
  for (int i = 5; i <= 15; i++) {
    for (int j = 0; j < (1 << 16); j++) {
      for (int d = 0; d < 16; d++) f[i][j] += f[i - 1][j | (1 << d)];
    }
  }
}
int q;
char s[100100], t[100100];
int digit(char c) { return c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; }
long long get(char *s) {
  int len = strlen(s);
  long long rlt = 0;
  for (int i = 0; i < len; i++) rlt = rlt * 16 + digit(s[i]);
  return rlt;
}
int cnt, d[66];
long long calc(long long n) {
  cnt = 0;
  while (n) d[cnt++] = n & 15, n >>= 4;
  long long rlt = 0;
  int add = 0;
  for (int i = cnt - 1; i >= 4; i--) {
    for (int c = 0; c < d[i]; c++) rlt += f[i][add | (1 << c)];
    add |= 1 << d[i];
  }
  int m = 0;
  for (int i = 0; i < 4 && i < cnt; i++) m += d[i] << (4 * i);
  for (int s = 0; s <= m; s++) {
    if ((s ^ (add | b[s])) < s) rlt++;
  }
  return rlt;
}
int main() {
  prepare();
  scanf("%d", &q);
  while (q--) {
    scanf("%s %s", s, t);
    long long l = get(s), r = get(t);
    if (!l) l++;
    printf("%I64d\n", calc(r) - calc(l - 1));
  }
  return 0;
}
