#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include //using Modint = atcoder::modint998244353; using namespace std; typedef long long ll; void ex_gcd(ll a, ll b, ll &d, ll &x, ll &y) { if (!b) { d = a; x = 1; y = 0; } else { ex_gcd(b, a % b, d, y, x); y -= a / b * x; } } ll inv(ll a, ll n) { ll d, x, y; ex_gcd(a, n, d, x, y); return d == 1 ? (x % n + n) % (n / d) : -1; } ll gcd(ll x, ll y) { if (y == 0) return x; return gcd(y, x % y); } int gcd(int x, int y) { if (y == 0) return x; return gcd(y, x % y); } inline bool scan_d(int &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; //EOF while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } const int maxn = 10; const int mod = 1000000007; string s[maxn]; bool b[maxn][maxn]; bool f[maxn][maxn][maxn]; int dir[2][2] = {{1, 0}, {0,1}}; void dfs(int x, int y, int n){ b[x][y] = 1; for(int i=0;i<2;i++){ int nx = x + dir[i][0]; int ny = y + dir[i][1]; if(nx<0||nx>=n||ny<0||ny>=n||s[nx][ny]=='#')continue; dfs(nx, ny, n); } } int main() { #ifdef suiyuan2009 freopen("/Users/suiyuan2009/CLionProjects/icpc/input.cpp", "r", stdin); freopen("/Users/suiyuan2009/CLionProjects/icpc/output.cpp", "w", stdout); #endif int T; cin>>T; while(T--) { int n; scan_d(n); for(int i=0;i>s[i]; if(s[0][0]=='#'||s[n-1][n-1]=='#'){ printf("0\n"); continue; } memset(b,false, sizeof(b)); dfs(0,0, n); if(!b[n-1][n-1]){ printf("0\n"); continue; } if((!b[1][0]||(!b[0][1]))){ printf("1\n"); continue; } memset(f, false, sizeof(f)); f[0][0][1] = 1; for(int i=0;i+1