#include <iostream>
#include <queue>
#include <cstring> 

using namespace std;

int t;
int dest_10[305], dest_300[305];
queue<int> q;
int direction[6] = {1, -1, 10, -10, 100, -100};

//状态10变为target (10 <= target <= 300) 
void init() {
	int ans;
	q.push(10);
	dest_10[10] = 0;
	while (!q.empty()) {
		int e = q.front(); 
		q.pop();
		for (int i = 0; i < 6; i++) {
			int val = direction[i] + e; 
			if (val >= 10 && val <= 300 && dest_10[val] == -1) {
				dest_10[val] = dest_10[e] + 1;
				q.push(val);
			}
		}
	}
//	ans = dest[target];
	
//	memset(dest, 0xFF, sizeof(dest));
	q.push(300);
	dest_300[300] = 1;
	while (!q.empty()) {
		int e = q.front(); 
		q.pop();
		for (int i = 0; i < 6; i++) {
			int val = direction[i] + e; 
			if (val >= 10 && val <= 300 && dest_300[val] == -1) {
				dest_300[val] = dest_300[e] + 1;
				q.push(val);
			}
		}
	}
//	ans = min(ans, dest[target]);
	
//	return ans;
	for (int i = 10; i <= 300; i++) {
		dest_10[i] = min(dest_10[i], dest_300[i]);
	}
}

//1.状态就一个
//2.其实操作6是完全没用的,操作5最多执行一次,同时操作1 ~ 4其实不会同时出现 +a 和 -a
//操作5做特判(两次bfs)主要是不想在for(int i = 0; i < 6; i++)做特判,其实也可以一次bfs
//3.把a, b, c, d分开求因为是独立的,合起来求感觉复杂很多
int main () {
	cin >> t;
	int a, b, c , d;
	memset(dest_10, 0xFF, sizeof(dest_10));
	memset(dest_300, 0xFF, sizeof(dest_300));
	init();
	while (t-- > 0) {
		cin >> a >> b >> c >> d;
		cout << dest_10[a] + dest_10[b] + dest_10[c] + dest_10[d] << endl;
	}
}