#include #include #include #include #include using namespace std; char mp[107][107]; int n; bool dfs1_check = false; bool dfs2_check = false; void dfs1(int i, int j) { if (i == n && j == n) { mp[i][j] = '.'; dfs1_check = true; return; } if (j + 1 <= n && mp[i][j + 1] == '.') { mp[i][j + 1] = '-'; dfs1(i, j + 1); if (dfs1_check) { return; } mp[i][j + 1] = '.'; } if (i + 1 <= n && mp[i + 1][j] == '.') { mp[i + 1][j] = '-'; dfs1(i + 1, j); if (dfs1_check) { return; } mp[i + 1][j] = '.'; } } void dfs2(int i, int j) { if (i == n && j == n) { dfs2_check = true; return; } if (i + 1 <= n && mp[i + 1][j] == '.') { mp[i + 1][j] = '-'; dfs2(i + 1, j); if (dfs2_check) { return; } mp[i + 1][j] = '.'; } if (j + 1 <= n && mp[i][j + 1] == '.') { mp[i][j + 1] = '-'; dfs2(i, j + 1); if (dfs2_check) { return; } mp[i][j + 1] = '.'; } } void solve() { dfs1_check = false; dfs2_check = false; memset(mp, 0, sizeof(mp)); cin >> n; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { cin >> mp[i][j]; } } int ans = 0; dfs1(1, 1); if (dfs1_check) { ++ans; } dfs2(1, 1); if (dfs2_check) { ++ans; } if(mp[1][1] == '#' || mp[n][n] == '#'){ ans = 0; } cout << ans << '\n'; } int main() { ios::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while (t--) { solve(); } return 0; }