/*
* 思路:
* 素數好辦,套個快速篩法就能得到1到10000的素數情況。對於bfs,每次枚舉當前數的每一位,再枚舉這位的取值情況。
* 就是下面的兩重for。好像也沒啥說的=.=,基本都是bfs的套路。
*/
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
const ll N = 1e4 + 10;
ll s, e;
ll num_prime;
ll visit[N], judge[N];
ll prime[N];
struct point{
ll x;
ll step;
}p1, p2;
queue<point> Q;
inline void init(){
judge[0] = judge[1] = 1;
for(ll i = 2; i < N; ++i){
if(judge[i] == 0)prime[num_prime++] = i;
for(ll j = 0; j < num_prime && i * prime[j] < N; ++j){
judge[i * prime[j]] = 1;
if(i % prime[j] == 0)break;
}
}
}
inline void bfs(){
memset(visit, 0, sizeof(visit));
while(!Q.empty())Q.pop();
p1.x = s, p1.step = 0;
Q.push(p1);
visit[s] = 1;
while(!Q.empty()){
p1 = Q.front();
Q.pop();
if(p1.x == e){
printf("%lld\n", p1.step);
return ;
}
for(ll i = 0; i < 4; ++i){
for(ll j = 0; j <= 9; ++j){
ll cur = p1.x;
if(i == 0){
ll iBase = cur % 10;
cur = cur - iBase + j;
}
if(i == 1){
ll iBase = (cur / 10) % 10;
cur = cur - iBase * 10 + j * 10;
}
if(i == 2){
ll iBase = (cur / 100) % 10;
cur = cur - iBase * 100 + j * 100;
}
if(i == 3){
ll iBase = cur / 1000;
cur = cur - iBase * 1000 + j * 1000;
}
if(visit[cur] == 0 && cur >= 1000 && judge[cur] == 0){
p2.x = cur, p2.step = p1.step + 1;
visit[cur] = 1;
Q.push(p2);
}
}
}
}
printf("Impossible\n");
}
int main(){
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
ll t;
init();
scanf("%lld", &t);
while(t--){
scanf("%lld%lld", &s, &e);
bfs();
}
return 0;
}