/*RESCUE*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<memory.h>
#include<algorithm>
using namespace std;
#define maxn 220
char start[6],end[6];
bool vis[10005];
struct re
{
int str[4];
int num;
re(const char *a)
{
num=0;
for(int i=0; i<4; ++i)
str[i]=a[i]-'0';
}
int cal()
{
return str[0]*1000+str[1]*100+str[2]*10+str[3];
}
bool operator ==(const re &tt) const
{
for(int i=0; i<4; ++i)
if(str[i]!=tt.str[i]) return false;
return true;
}
};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s%s",start,end);
re End(end);
queue<re> Q;
Q.push(start);
memset(vis,false,sizeof(vis));
while(!Q.empty())
{
re Beg=Q.front();
Q.pop();
if(Beg==End)
{
printf("%d\n",Beg.num);
break;
}
Beg.num++;
int pp;
for(int pos=0; pos<4; pos++)
{
Beg.str[pos]++;
if(Beg.str[pos]==10) Beg.str[pos]=1;
if(!vis[pp=Beg.cal()])
{
vis[pp]=true;
Q.push(Beg);
}
Beg.str[pos]--;
if(Beg.str[pos]==0) Beg.str[pos]=9;
Beg.str[pos]--;
if(Beg.str[pos]==0) Beg.str[pos]=9;
if(!vis[pp=Beg.cal()])
{
vis[pp]=true;
Q.push(Beg);
}
Beg.str[pos]++;
if(Beg.str[pos]==10) Beg.str[pos]=1;
}
for(int pos=0; pos<3; pos++)
{
int tmp=Beg.str[pos];
Beg.str[pos]=Beg.str[pos+1];
Beg.str[pos+1]=tmp;
if(!vis[pp=Beg.cal()])
{
vis[pp]=true;
Q.push(Beg);
}
tmp=Beg.str[pos];
Beg.str[pos]=Beg.str[pos+1];
Beg.str[pos+1]=tmp;
}
}
}
}