#include <iostream>
#include <queue>
using namespace std;
bool Array[10000];
bool B[10000];
struct Data
{
int num;
int depth;
};
int Pow(int i,int j)
{
int n = 1 ;
for (int m = 0 ;m < j ;m++)
n = n * i;
return n;
}
void splite(int num,int A[])
{
for (int i = 3 ; i >=0 ; i--)
{
A[i] = num / Pow(10,i);
num = num % Pow(10,i);
}
}
int Combine(int A[])
{
int temp = 0;
for (int i = 0 ; i < 4; i++)
{
temp += A[i] *Pow(10,i);
}
return temp;
}
int fun(int a,int b)
{
queue<Data> Queue;
Data data;
data.depth = 0;
data.num = a;
B[a] = true;
Queue.push(data);
while(!Queue.empty())
{
data = Queue.front();
int m = data.num;
if (m == b)
{
return data.depth;
}
Queue.pop();//?
int A[4];
splite(m,A);
for (int i = 0 ; i < 4 ; i++)
{
int temp = A[i];
int j;
if ( i == 3)
j = 1;
else
j = 0;
while (j < 10)
{
if (temp != j)
{
A[i] = j;
int n = Combine(A);
if (Array[n] && !B[n])
{
Data d;
d.depth = data.depth+1;
d.num = n;
B[n] = true;
Queue.push(d);
}
}
j++;
}
A[i] = temp;
}
}
}
int main()
{
for (int i = 2 ; i < 10000; i++)
Array[i] = true;
for (int i = 2 ; i < 10000; i++)
{
for (int j = i ; i*j < 10000; j++)
Array[i*j] = false;
}
int number;
cin>>number;
while (--number >= 0)
{
int a,b;
cin>>a>>b;
for (int i = 1000; i < 10000 ; i++)
B[i] = false;
cout<<fun(a,b)<<endl;
}
system("pause");
return 0;
}