#include <stdio.h>
#include <cmath>
#include <cstring>
#include <queue>
#define maxs 100005
using namespace std;
int b[maxs],visit[maxs];
void prtable()
{
int i,j;
for (i=1000;i<10000;i++)
{
b[i]=1;
for (j=2;j<=sqrt(i);j++) //不要忘了等号
if (i%j==0)
{b[i]=0;break;}
} //借鉴的打表
}
int change (int s , int i)
{
int j,a[5];
for(j=0;j<4;j++)//数组实现
{
a[j]=s%10;
s/=10;
}
a[i-1]=0;
for(j=0;j<4;j++)
{s+=a[j]*pow(10,j);}
return s;
}
int main()
{
int n,a,c,time,i,t,tt,s,s1,j,fine;
scanf("%d",&n);
prtable();
while (n--)
{
scanf("%d%d",&a,&c);
if (a==c)
{printf("0\n");continue;}
time=0,fine=0;
queue <int> Q;
memset(visit,0,sizeof(visit));
Q.push (a);
visit[a]=1;
while (!Q.empty() && !fine)
{
tt=Q.size();//队列里元素的个数
time++;
while(tt--)
{
s=Q.front();
Q.pop();
for (i=1;i<=4;i++)
{
t=change(s,i);
for (j=0;j<=9;j++)
{
s1=t+j*pow(10,i-1);
if (s1==c)
{fine=1;goto er;}
else if( b[s1] && !visit[s1])
{Q.push(s1);visit[s1]=1;}
}
}
}
}
er: if(fine)
printf("%d\n",time);
else
printf("Impossible\n");
}
return 0;
}