#include<iostream>
#include<bitset>
int main()
{
unsigned long long powsOf10[20]
{
1,
10,
100,
1'000,
10'000,
100'000,
1'000'000,
10'000'000,
100'000'000,
1'000'000'000,
10'000'000'000,
100'000'000'000,
1'000'000'000'000,
10'000'000'000'000,
100'000'000'000'000,
1'000'000'000'000'000,
10'000'000'000'000'000,
100'000'000'000'000'000,
1'000'000'000'000'000'000,
10'000'000'000'000'000'000
};
unsigned long long ones[19]
{
1,
11,
111,
1'111,
11'111,
111'111,
1'111'111,
11'111'111,
111'111'111,
1'111'111'111,
11'111'111'111,
111'111'111'111,
1'111'111'111'111,
11'111'111'111'111,
111'111'111'111'111,
1'111'111'111'111'111,
11'111'111'111'111'111,
111'111'111'111'111'111,
1'111'111'111'111'111'111
};
int n;
std::cin >> n;
long long a;
long long b;
long long temp;
int toA = 0;
int toB = 0;
int between;
int omA = 0;
int omB = 0;
bool aMidRange = false;
bool bMidRange = false;
for (int i = 0; i < n; i++)
{
std::cin >> a;
std::cin >> b;
for (int i = 0; i < 20; i++)
{
if(a%powsOf10[i] == a)
{
omA = i - 1;
break;
}
}
for (int i = 0; i < 20; i++)
{
if (b % powsOf10[i] == b)
{
omB = i - 1;
break;
}
}
if (a == 0)
toA = 1;
else
toA = 2 << omA;
if (b == 0)
toB = 1;
else
toB = 2 << omB;
//*******
temp = ones[omA];
if (a < temp)
toA--;
for (int i = 0; i < omA; i++)
{
temp = ones[omA];
for (int j = 0; j < i; j++)
{
temp -= powsOf10[omA - j];
}
for (int j = 0; j < omA-i; j++)
{
if (a < temp - powsOf10[j])
toA--;
}
}
//*******
//*******
temp = ones[omB];
if (b < temp)
toB--;
for (int i = 0; i < omB; i++)
{
temp = ones[omB];
for (int j = 0; j < i; j++)
{
temp -= powsOf10[omB - j];
}
for (int j = 0; j < omB - i; j++)
{
if (b < temp - powsOf10[j])
toB--;
}
}
//*******
aMidRange = powsOf10[omA] < a < ones[omA];
bMidRange = powsOf10[omB] < b < ones[omB];
if (a == b)
{
if (aMidRange)
between = 1;
else
between = 0;
}
else if (toA == toB)
{
if (!aMidRange && !bMidRange)
between = 0;
else
between = toB - toA + 1;
}
else
between = toB - toA + 1;
std::cout << between << '\n';
}
return 0;
}