Rikka with Coin
#include <bits/stdc++.h>
#define mem(ar,num) memset(ar,num,sizeof(ar))
#define me(ar) memset(ar,0,sizeof(ar))
#define lowbit(x) (x&(-x))
#define Pb push_back
#define FI first
#define SE second
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define IOS ios::sync_with_stdio(false)
#define DEBUG cout<<endl<<"DEBUG"<<endl;
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int prime = 999983;
const int INF = 0x7FFFFFFF;
const LL INFF = 0x7FFFFFFFFFFFFFFF;
const double pi = acos(-1.0);
const double inf = 1e18;
const double eps = 1e-6;
const LL mod = 1e9 + 7;
LL qpow(LL a, LL b) {LL s = 1; while (b > 0) {if (b & 1)s = s * a % mod; a = a * a % mod; b >>= 1;} return s;}
LL gcd(LL a, LL b) {return b ? gcd(b, a % b) : a;}
int dr[2][4] = {1, -1, 0, 0, 0, 0, -1, 1};
typedef pair<int, int> P;
const int maxn = 100 + 10;
LL w[maxn];
int n;
int dp[6][6][6][21];
LL solve() {
cin >> n;
for (int i = 1; i <= n; ++i)
scanf("%lld", &w[i]);
for (int i = 1; i <= n; ++i) {
if (w[i] % 10 != 0) return -1;
w[i] /= 10;
}
LL ans = INF;
for (int i = 0; i <= 4; ++i) {
for (int j = 0; j <= 4; ++j) {
for (int k = 0; k <= 4; ++k) {
LL t = 0;
for (int l = 1; l <= n; ++l) {
LL t1, t2;
t1 = t2 = INF;
if (1) {
LL tmp = w[l] % 10;
if (!dp[i][j][k][tmp]) {
t1 = INF;
}
else {
LL sub = (w[l] - tmp) / 10;
t1 = sub;
}
}
if (1) {
if (w[l] >= 10) {
LL tmp = w[l] % 10 + 10;
if (!dp[i][j][k][tmp]) {
t2 = INF;
}
else {
LL sub = (w[l] - tmp) / 10;
t2 = sub;
}
}
}
t = max(t, min(t1, t2));
}
if (t != INF) {
ans = min(ans, i + j + k + t);
}
}
}
}
return ans;
}
int main(void)
{
for (int i = 0; i <= 5; ++i) {
for (int j = 0; j <= 5; ++j) {
for (int k = 0; k <= 5; ++k) {
dp[i][j][k][0] = 1;
for (int l = 20; l > 0; --l) {
if (i > 0 && l >= 1)
dp[i][j][k][l] |= dp[i - 1][j][k][l - 1];
if (j > 0 && l >= 2)
dp[i][j][k][l] |= dp[i][j - 1][k][l - 2];
if (k > 0 && l >= 5)
dp[i][j][k][l] |= dp[i][j][k - 1][l - 5];
}
}
}
}
int T; cin >> T;
while (T--) {
cout << solve() << endl;
}
return 0;
}