#include <bits/stdc++.h>
#define MAXN 300
using namespace std;
typedef pair<int, int> pii;
typedef pair<long long, pii> plii;
int n;
vector<int> ans;
int etot, e[MAXN * MAXN * 3 * 2 + 10][3], p[MAXN * MAXN + 10];
long long dis[MAXN * MAXN + 10];
int from[MAXN * MAXN + 10];
bool ban[MAXN * MAXN * 3 * 2 + 10];
int gao(int i, int j) { return i * n + j; }
void adde(int sn, int fn, int val) {
etot++; e[etot][0] = fn; e[etot][1] = val; e[etot][2] = p[sn]; p[sn] = etot;
etot++; e[etot][0] = sn; e[etot][1] = val; e[etot][2] = p[fn]; p[fn] = etot;
}
// dijkstra 求从 (1, 1) 到 (n, n) 的最短路
void dijkstra() {
memset(dis, -1, sizeof(long long) * (n * n + 3));
priority_queue<plii> pq;
pq.push(plii(0, pii(0, 0)));
while (!pq.empty()) {
plii tp = pq.top(); pq.pop();
int sn = tp.second.first;
if (dis[sn] >= 0) continue;
dis[sn] = -tp.first;
from[sn] = tp.second.second;
for (int i = p[sn]; i > 0; i = e[i][2]) {
int fn = e[i][0];
if (dis[fn] >= 0) continue;
pq.push(plii(-dis[sn] - e[i][1], pii(fn, i)));
}
}
memset(ban, 0, sizeof(bool) * (etot + 3));
for (int sn = gao(n - 1, n - 1); sn > 0; sn = e[from[sn] ^ 1][0]) ban[from[sn]] = ban[from[sn] ^ 1] = true;
}
// hierholzer 求欧拉路径
void dfs(int sn) {
for (int i = p[sn]; i > 0; i = p[sn]) {
if (ban[i]) { p[sn] = e[i][2]; continue; }
ban[i] = ban[i ^ 1] = true;
dfs(e[i][0]);
ans.push_back(e[i][0]);
}
}
short dir[3][4] = {0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1};
void solve() {
scanf("%d", &n);
etot = 1;
memset(p, 0, sizeof(int) * (n * n + 3));
long long sm = 0;
for (int k = 0; k < 3; k++) for (int i = 0; i < n - 1; i++) for (int j = 0; j <= i; j++) {
int x = gao(i + dir[k][0], j + dir[k][1]), y = gao(i + dir[k][2], j + dir[k][3]);
int z; scanf("%d", &z);
adde(x, y, z);
sm += z;
}
// 求最短路
dijkstra();
// 最长路径就是边权之和减去最短路的长度
printf("%lld\n", sm - dis[gao(n - 1, n - 1)]);
// 求欧拉路径
ans.clear(); dfs(0); reverse(ans.begin(), ans.end());
printf("%d\n1 1", ans.size() + 1);
for (int i = 0; i < ans.size(); i++) printf(" %d %d", ans[i] / n + 1, ans[i] % n + 1);
printf("\n");
}
int main() {
int tcase; scanf("%d", &tcase);
while (tcase--) solve();
return 0;
}