#include #include #include template struct maxflow { struct Edge { int to, nxt; long long val; Edge() { } Edge(int to, int nxt, long long val) : to(to), nxt(nxt), val(val) { } } e[E * 2]; int etot, head[V]; inline void reset() { memset(head, 0, sizeof(head)); etot = 1; } inline void add_arc(int u, int v, long long cap) { e[++etot] = Edge(v, head[u], cap), head[u] = etot; e[++etot] = Edge(u, head[v], 0), head[v] = etot; } int dep[V]; bool bfs(int s, int t) { static int que[V], l, r; memset(dep, 0, sizeof(dep)); dep[que[l = r = 1] = s] = 1; while (l <= r) { int x = que[l++]; for (int i = head[x], y; i; i = e[i].nxt) if (!dep[y = e[i].to] && e[i].val) dep[que[++r] = y] = dep[x] + 1; } return dep[t] != 0; } long long dfs(int x, long long in, int t) { if (x == t) return in; long long out = 0ll; for (int i = head[x], y; i && in; i = e[i].nxt) if (e[i].val && dep[y = e[i].to] == dep[x] + 1) { long long res = dfs(y, std::min(e[i].val, in), t); in -= res, out += res; e[i].val -= res, e[i ^ 1].val += res; } if (!out) dep[x] = 0; return out; } long long process(int s, int t) { long long ans = 0ll; while (bfs(s, t)) ans += dfs(s, 1e18, t); return ans; } }; int s, t; void solve() { maxflow<205, 1005> mf; mf.reset(); int nt; std::cin >> nt; for (int i = 1; i <= nt; i++) for (int j = 1; j <= nt; j++) { char c; std::cin >> c; int idx = nt * (i - 1) + j; if (c == '.') { if ((i == 1 && j == 1) || (i == nt && j == nt)) mf.add_arc(idx, idx + nt * nt, 1e9); else mf.add_arc(idx, idx + nt * nt, 1); } else mf.add_arc(idx, idx + nt * nt, 0); } for (int i = 1; i <= nt; i++) for (int j = 1; j <= nt; j++) { int idx = nt * (i - 1) + j; if (i != nt) { int nxt = nt * i + j; mf.add_arc(idx + nt * nt, nxt, 1e9); } if (j != nt) { int nxt = nt * (i - 1) + j + 1; mf.add_arc(idx + nt * nt, nxt, 1e9); } } s = 1, t = nt * nt * 2; std::cout << mf.process(s, t) << std::endl; } signed main() { // std::cin >> n >> m >> s >> t; // for (int i = 1; i <= m; i++) { // int u, v; LL w; // scanf("%d%d%lld", &u, &v, &w); // mf.add_arc(u, v, w); // mf.add_arc(v, u, 0); // } // std::cout << Dinic::solve(s, t) << std::endl; // return 0; int T; std::cin >> T; while (T--) solve(); } /* 1 2 .. .. */ /* 9 2 .. .. 3 ... .## ... 3 .#. #.. ... 2 .. .. 3 ... .## ... 3 .#. #.. ... 2 .. .. 3 ... .## ... 3 .#. #.. ... */