#include<stdio.h>
int vis[17][17]={0};
char c[17][17];
int n,m;
int dfs(int x,int y)
{
if(x==n-1 && y==n-1) return 1;
if((c[x][y+1]!='#') && (y+1<n) && (vis[x][y+1]!=1)) //判断是否越界或者前面是否是墙 向右走
{
vis[x][y]=1;
if(dfs(x,y+1)) return 1;
//vis[x][y]=0;
}
if((c[x+1][y]!='#') && (x+1<n) && (vis[x+1][y]!=1)) //向下走
{
vis[x][y]=1;
if(dfs(x+1,y)) return 1;
//vis[x][y]=0;
}
if((c[x][y-1]!='#') && (y-1>=0) && (vis[x][y-1]!=1)) //向左走
{
vis[x][y]=1;
if(dfs(x,y-1)) return 1;
//vis[x][y]=0;
}
if((c[x-1][y]!='#') && (x-1>=0) && (vis[x-1][y]!=1)) //向上走
{
vis[x][y]=1;
if(dfs(x-1,y)) return 1;
//vis[x][y]=0;
}
return 0;
}
int main()
{
scanf("%d",&m); //迷宫个数
while(m--)
{
scanf("%d",&n); //迷宫大小n*n
//getchar();
for(int i=0;i<n;++i)
scanf("%s",c[i]); //#代表墙 .代表路 s代表起点 e代表终点
//gets(c[i]);
if(dfs(0,0)) printf("YES");
else printf("NO");
}
return 0;
}
int vis[17][17]={0};
char c[17][17];
int n,m;
int dfs(int x,int y)
{
if(x==n-1 && y==n-1) return 1;
if((c[x][y+1]!='#') && (y+1<n) && (vis[x][y+1]!=1)) //判断是否越界或者前面是否是墙 向右走
{
vis[x][y]=1;
if(dfs(x,y+1)) return 1;
//vis[x][y]=0;
}
if((c[x+1][y]!='#') && (x+1<n) && (vis[x+1][y]!=1)) //向下走
{
vis[x][y]=1;
if(dfs(x+1,y)) return 1;
//vis[x][y]=0;
}
if((c[x][y-1]!='#') && (y-1>=0) && (vis[x][y-1]!=1)) //向左走
{
vis[x][y]=1;
if(dfs(x,y-1)) return 1;
//vis[x][y]=0;
}
if((c[x-1][y]!='#') && (x-1>=0) && (vis[x-1][y]!=1)) //向上走
{
vis[x][y]=1;
if(dfs(x-1,y)) return 1;
//vis[x][y]=0;
}
return 0;
}
int main()
{
scanf("%d",&m); //迷宫个数
while(m--)
{
scanf("%d",&n); //迷宫大小n*n
//getchar();
for(int i=0;i<n;++i)
scanf("%s",c[i]); //#代表墙 .代表路 s代表起点 e代表终点
//gets(c[i]);
if(dfs(0,0)) printf("YES");
else printf("NO");
}
return 0;
}