#include <bits/stdc++.h>
using namespace std;
int N;
int grid[11][11]; // Maze grid
bool visited[11][11]; // Mark visited cells
int dr[4] = {-1, 1, 0, 0}; // Up, Down, Left, Right
int dc[4] = {0, 0, -1, 1};
int bestJewels;
vector<pair<int,int>> bestPath;
bool inBounds(int r, int c) {
return r >= 0 && r < N && c >= 0 && c < N;
}
void dfs(int r, int c, int jewels, vector<pair<int,int>> &path) {
// If reached the exit, update best answer
if (r == N-1 && c == N-1) {
if (jewels > bestJewels) {
bestJewels = jewels;
bestPath = path;
}
return;
}
// Explore neighbors
for (int k = 0; k < 4; k++) {
int nr = r + dr[k], nc = c + dc[k];
if (!inBounds(nr, nc) || visited[nr][nc] || grid[nr][nc] == 1)
continue;
visited[nr][nc] = true;
path.push_back({nr, nc});
int add = (grid[nr][nc] == 2 ? 1 : 0);
dfs(nr, nc, jewels + add, path);
path.pop_back();
visited[nr][nc] = false;
}
}
void solve() {
cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> grid[i][j];
memset(visited, false, sizeof(visited));
bestJewels = -1;
bestPath.clear();
vector<pair<int,int>> path;
path.push_back({0,0});
visited[0][0] = true;
int startJewels = (grid[0][0] == 2 ? 1 : 0);
dfs(0, 0, startJewels, path);
// Output
cout << bestJewels << "\n";
cout << bestPath.size()<< "\n";
for (auto &p : bestPath)
cout << p.first + 1 << " " << p.second + 1 << "\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgTjsKaW50IGdyaWRbMTFdWzExXTsgICAgICAgICAgLy8gTWF6ZSBncmlkCmJvb2wgdmlzaXRlZFsxMV1bMTFdOyAgICAgIC8vIE1hcmsgdmlzaXRlZCBjZWxscwppbnQgZHJbNF0gPSB7LTEsIDEsIDAsIDB9OyAvLyBVcCwgRG93biwgTGVmdCwgUmlnaHQKaW50IGRjWzRdID0gezAsIDAsIC0xLCAxfTsKCmludCBiZXN0SmV3ZWxzOwp2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gYmVzdFBhdGg7Cgpib29sIGluQm91bmRzKGludCByLCBpbnQgYykgewogICAgcmV0dXJuIHIgPj0gMCAmJiByIDwgTiAmJiBjID49IDAgJiYgYyA8IE47Cn0KCnZvaWQgZGZzKGludCByLCBpbnQgYywgaW50IGpld2VscywgdmVjdG9yPHBhaXI8aW50LGludD4+ICZwYXRoKSB7CiAgICAvLyBJZiByZWFjaGVkIHRoZSBleGl0LCB1cGRhdGUgYmVzdCBhbnN3ZXIKICAgIGlmIChyID09IE4tMSAmJiBjID09IE4tMSkgewogICAgICAgIGlmIChqZXdlbHMgPiBiZXN0SmV3ZWxzKSB7CiAgICAgICAgICAgIGJlc3RKZXdlbHMgPSBqZXdlbHM7CiAgICAgICAgICAgIGJlc3RQYXRoID0gcGF0aDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEV4cGxvcmUgbmVpZ2hib3JzCiAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykgewogICAgICAgIGludCBuciA9IHIgKyBkcltrXSwgbmMgPSBjICsgZGNba107CiAgICAgICAgaWYgKCFpbkJvdW5kcyhuciwgbmMpIHx8IHZpc2l0ZWRbbnJdW25jXSB8fCBncmlkW25yXVtuY10gPT0gMSkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgdmlzaXRlZFtucl1bbmNdID0gdHJ1ZTsKICAgICAgICBwYXRoLnB1c2hfYmFjayh7bnIsIG5jfSk7CiAgICAgICAgaW50IGFkZCA9IChncmlkW25yXVtuY10gPT0gMiA/IDEgOiAwKTsKCiAgICAgICAgZGZzKG5yLCBuYywgamV3ZWxzICsgYWRkLCBwYXRoKTsKCiAgICAgICAgcGF0aC5wb3BfYmFjaygpOwogICAgICAgIHZpc2l0ZWRbbnJdW25jXSA9IGZhbHNlOwogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IE47CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykKICAgICAgICAgICAgY2luID4+IGdyaWRbaV1bal07CgogICAgbWVtc2V0KHZpc2l0ZWQsIGZhbHNlLCBzaXplb2YodmlzaXRlZCkpOwogICAgYmVzdEpld2VscyA9IC0xOwogICAgYmVzdFBhdGguY2xlYXIoKTsKCiAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gcGF0aDsKICAgIHBhdGgucHVzaF9iYWNrKHswLDB9KTsKICAgIHZpc2l0ZWRbMF1bMF0gPSB0cnVlOwogICAgaW50IHN0YXJ0SmV3ZWxzID0gKGdyaWRbMF1bMF0gPT0gMiA/IDEgOiAwKTsKCiAgICBkZnMoMCwgMCwgc3RhcnRKZXdlbHMsIHBhdGgpOwoKICAgIC8vIE91dHB1dAogICAgY291dCA8PCBiZXN0SmV3ZWxzIDw8ICJcbiI7CiAgICBjb3V0IDw8IGJlc3RQYXRoLnNpemUoKTw8ICJcbiI7CiAgICBmb3IgKGF1dG8gJnAgOiBiZXN0UGF0aCkKICAgICAgICBjb3V0IDw8IHAuZmlyc3QgKyAxIDw8ICIgIiA8PCBwLnNlY29uZCArIDEgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIGludCBUOwogICAgY2luID4+IFQ7CiAgICB3aGlsZSAoVC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K