#include <iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
int st,ed;
int vis[10005];
int tmp[5];
struct Node{
int val,step;
bool operator <(const Node b)const{
return step>b.step;
}
};
priority_queue<Node> q;
int bfs(){
while(!q.empty()) q.pop();
vis[st]=1;q.push(Node{st,0});
while(!q.empty()){
Node top=q.top();q.pop();
int val=top.val,step=top.step;
if(val==ed) return step;
tmp[1]=(val/1000)%10,tmp[2]=(val/100)%10;
tmp[3]=(val/10)%10,tmp[4]=(val/1)%10;
int cpy;
for(int i=1;i<=4;i++){
cpy=tmp[i];
if(tmp[i]==9) tmp[i]=1;
else tmp[i]++;
int now=tmp[1]*1000+tmp[2]*100+tmp[3]*10+tmp[4];
if(!vis[now]) vis[now]=1,q.push(Node{now,step+1});
tmp[i]=cpy;
}
for(int i=1;i<=4;i++){
cpy=tmp[i];
if(tmp[i]==1) tmp[i]=9;
else tmp[i]--;
int now=tmp[1]*1000+tmp[2]*100+tmp[3]*10+tmp[4];
if(!vis[now]) vis[now]=1,q.push(Node{now,step+1});
tmp[i]=cpy;
}
for(int i=1;i<=3;i++){
swap(tmp[i],tmp[i+1]);
int now=tmp[1]*1000+tmp[2]*100+tmp[3]*10+tmp[4];
if(!vis[now]) vis[now]=1,q.push(Node{now,step+1});
swap(tmp[i],tmp[i+1]);
}
}
return -1;
}
int main()
{
int t;scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
scanf("%d%d",&st,&ed);
int ans=bfs();
printf("%d\n",ans);
}
return 0;
}