import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.Scanner;
//题目可以通过bfs或者dp解决
//用bfs的话需要考虑重复计算问题,如果每个数据都进行一次bfs将会超时
//所以可以预计算dist,将期间所有数需要操作的次数都用bfs统计一遍
//后续每个数据都可以查表解决
public class Main {
static int[] offset = new int[] {1, -1, 10, -10, 100, -100};
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
in.nextLine();
//预计算dist
int[] dist=getDist();
while (n > 0) {
n--;
int[] target = new int[4];
for (int i = 0; i < 4; i++) {
target[i] = in.nextInt();
}
in.nextLine();
//查表直接累加操作次数即可
int count = 0;
for (int i = 0; i < 4; i++) {
count+=dist[target[i]];
}
System.out.println(count);
}
}
}
//获取从10开始达到所有可能数字的操作次数
public static int[] getDist() {
int[] dist=new int[301];//最高数据300,为了方便使用直接给到301长度
Arrays.fill(dist,-1);//初始值设定为-1方便检查
Deque<int[]> que = new ArrayDeque<>();
int count = 0;
que.offer(new int[]{10, 0});//从10开始搜索
que.offer(new int[]{300,1});//初始设置为上限,从300开始搜索,此次已经操作一次
dist[10]=0;
dist[300]=1;
while (!que.isEmpty()) {
int[] cur = que.poll();
//遍历每个偏移量
for (int i = 0; i < offset.length; i++) {
int nn = cur[0] + offset[i];
//初次到达时赋值dist并入队
if (nn >= 10 && nn <= 300 &&dist[nn]==-1) {
que.offer(new int[] {nn, cur[1] + 1});
dist[nn]=cur[1]+1;
}
}
}
// System.out.println(count);
return dist;
}
}