/*
分析:
拓扑排序。
深搜啊什么的都行。
2012-12-13
*/
分析:
拓扑排序。
深搜啊什么的都行。
2012-12-13
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"queue"
#define N 2011
using namespace std;
int n;
char map[N][N];
int indegree[N];
struct Eage{
int from,to,next;
}eage[N*N/2];
int tot,head[N];
void add(int a,int b){
eage[tot].from=a;eage[tot].to=b;eage[tot].next=head[a];head[a]=tot++;
}
void get_map()
{
int i,l;
tot=0;
memset(head,-1,sizeof(head));
memset(indegree,0,sizeof(indegree));
for(i=0;i<n;i++)
{
scanf("%s",&map[i]);
for(l=0;map[i][l];l++) if(map[i][l]=='1') {add(i,l);indegree[l]++;}
}
}
int topsort()
{
int i,j;
int k=0;
int flag;
while(k<n)
{
flag=0;
for(i=0;i<n;i++)
{
if(indegree[i]) continue;
k++;
flag=1;
indegree[i]--;
for(j=head[i];j!=-1;j=eage[j].next) indegree[eage[j].to]--;
}
if(!flag) return 1;
}
return 0;
}
int main()
{
int T,Case;
int ans;
scanf("%d",&T);
for(Case=1;Case<=T;Case++)
{
scanf("%d",&n);
get_map();
ans=topsort();
if(ans) printf("Case #%d: Yes\n",Case);
else printf("Case #%d: No\n",Case);
}
return 0;
}