# include <cstdio>
# include <cstring>
# include <queue>
using namespace std;
int dist[ 10010 ] , primes[ 10010 ] , st[ 10010 ] , cnt;
void get_primes ( )
{
for ( int i= 2 ; i<= 10000 ; i++ )
{
if ( ! st[ i] ) primes[ cnt++ ] = i;
for ( int j= 0 ; primes[ j] <= 10000 / i; j++ )
{
st[ primes[ j] * i] = 1 ;
if ( i% primes[ j] == 0 ) break ;
}
}
}
int bfs ( int begin, int end)
{
memset ( dist, - 1 , sizeof dist) ;
dist[ begin] = 0 ;
queue< int > q;
q. push ( begin) ;
while ( ! q. empty ( ) )
{
int t= q. front ( ) ; q. pop ( ) ;
if ( t== end) return dist[ t] ;
int v[ 4 ] = { t/ 1000 , t% 1000 / 100 , t% 100 / 10 , t% 10 } ;
for ( int i= 0 ; i< 4 ; i++ )
{
int temp= v[ i] , vtemp;
for ( int j= 0 ; j< 10 ; j++ )
{
if ( i== 0 && j== 0 ) continue ;
v[ i] = j;
vtemp= v[ 0 ] * 1000 + v[ 1 ] * 100 + v[ 2 ] * 10 + v[ 3 ] ;
if ( ! st[ vtemp] && dist[ vtemp] == - 1 )
{
dist[ vtemp] = dist[ t] + 1 ;
q. push ( vtemp) ;
}
}
v[ i] = temp;
}
}
return - 1 ;
}
int main ( )
{
get_primes ( ) ;
int n; scanf ( "%d" , & n) ;
while ( n-- )
{
int begin, end; scanf ( "%d%d" , & begin, & end) ;
int res= bfs ( begin, end) ;
if ( res== - 1 ) puts ( "Impossible" ) ;
else printf ( "%d\n" , res) ;
}
return 0 ;
}