import java.util.Scanner;
public class Test2048 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int times = scan.nextInt();
int[][] arr = new int[times][10];
for (int i = 0; i < times; i++) {
for (int j = 0; j < 10; j++) {
arr[i][j] = scan.nextInt();
}
}
for (int i = 0; i < times; i++) {
System.out.println(leastCount(arr[i], 0));
}
}
// 递归寻找一维数组的最少的合成次数
public static int leastCount(int[] arr, int count) {
if (arr[9] >= 2) {
return count;
}
int index = 8;
while (index >= 0 && arr[index] < 2) {
index--;
}
arr[index] -= 2;
arr[index + 1] += 1;
return leastCount(arr, count + 1);
}
}
import java.util.Scanner;
public class Test2048 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int times = scan.nextInt();
int[][] arr = new int[times][10];
for (int i = 0; i < times; i++) {
for (int j = 0; j < 10; j++) {
arr[i][j] = scan.nextInt();
}
}
for (int i = 0; i < times; i++) {
System.out.println(leastCount(arr[i]));
}
}
// 迭代寻找一维数组的最少的合成次数
public static int leastCount(int[] arr) {
int count = 0;
while (arr[9] < 2) {
int index = 8;
while (index >= 0 && arr[index] < 2) {
index--;
}
if (index >= 0) {
arr[index] -= 2;
arr[index + 1] += 1;
count++;
} else {
break;
}
}
return count;
}
}