#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <cstring>
#include <functional>
#include <cmath>
using namespace std;
#define rep(i,n) for(int i=0;i<(n);++i)
#define rep1(i,n) for(int i=1;i<=(n);++i)
#define all(c) (c).begin(),(c).end()
#define fs first
#define sc second
#define pb push_back
#define show(x) cout << #x << " " << x << endl
struct state{
	int a[4][8];
};
inline bool operator<(const state &l,const state &r){
	rep(i,4) rep(j,8) if(l.a[i][j]!=r.a[i][j]) return l.a[i][j]<r.a[i][j];
	return false;
}
map<state,int> msi;
state goal;
int bfs(state s){
	msi.clear();
	queue<state> que;
	que.push(s);
	msi[s]=0;
	while(!que.empty()){
		state st=que.front();
		que.pop();
		bool ok=true;
		rep(i,4) rep(j,7) if(st.a[i][j]!=(i+1)*10+j+1){
			ok=false;
			break;
		}
		if(ok){
			return msi[st];
		}
		rep(i,4) rep(j,8){
			if(st.a[i][j]==0){
				state nst=st;
				int x=i,y=j-1;
				if(y==-1) continue;
				if(st.a[x][y]==0) continue;
				int s=st.a[x][y];
				if(s%10==7) continue;
				s++;
				int k,h;
				rep(kk,4) rep(hh,8) if(st.a[kk][hh]==s) k=kk,h=hh;
				nst.a[k][h]=0;
				nst.a[i][j]=s;
				if(!msi.count(nst)){
					msi[nst]=msi[st]+1;
					que.push(nst);
				}
			}
		}
	}
	return -1;
}
int main(){
	rep(i,4) rep(j,7){
		goal.a[i][j]=(i+1)*10+j+1;
	}
	rep(i,4) goal.a[i][7]=0;
	int t;
	cin>>t;
	rep(tt,t){
		state st;
		rep(i,4) rep(j,8) st.a[i][j]=0;
		rep(i,4) rep1(j,7){
			int aa;
			cin>>aa;
			if(aa%10!=1) st.a[i][j]=aa;
		}
		rep(i,4) st.a[i][0]=i*10+11;
		cout<<bfs(st)<<endl;
	}
}