import java.util.ArrayList ;
import java.util.Scanner ;
public class Main {
final static int SIZE= 110 ;
static ArrayList
< ArrayList
< Integer
>> list
= new ArrayList ( ) ; static ArrayList
< Integer
> list1
= new ArrayList ( ) ; static int vis[ ] = new int [ SIZE] , curr;
static int mat[ ] [ ] = new int [ SIZE] [ SIZE] ;
public static void dfs( int node) {
vis[ node] = 1 ;
list1.add ( node) ;
int l= list.get ( node) .size ( ) ;
int i,v;
for ( i= 0 ; i< l; i++ ) {
v= list.get ( node) .get ( i) ;
if ( vis[ v] == 0 ) {
vis[ v] = 1 ;
dfs( v) ;
}
}
}
static void dfs1( int node) {
vis[ node] = 1 ;
int i,u,l= list.get ( node) .size ( ) ;
for ( i= 0 ; i< l; i++ ) {
u= list.get ( node) .get ( i) ;
if ( vis[ u] == 0 && u!= curr) {
vis[ u] = 1 ;
dfs1( u) ;
}
}
}
public static void main
( String [ ] args
) {
Scanner sc
= new Scanner
( System .
in ) ;
int t= sc.nextInt ( ) ,n;
int i,j,v,cnt,x,y,cs= 1 ;
char ch;
while ( t--> 0 ) {
n= sc.nextInt ( ) ;
for ( i= 0 ; i< n; i++ ) {
vis[ i] = 0 ;
for ( j= 0 ; j< n; j++ ) {
v= sc.nextInt ( ) ;
if ( v== 1 )
tmpList.add ( j) ;
mat[ i] [ j] = 0 ;
}
list.add ( tmpList) ;
}
dfs( 0 ) ;
for ( i= 0 ; i< list1.size ( ) ; i++ ) {
for ( j= 0 ; j< list1.size ( ) ; j++ )
vis[ list1.get ( j) ] = 0 ;
curr= list1.get ( i) ;
if ( curr!= 0 )
dfs1( 0 ) ;
for ( j= 0 ; j< list1.size ( ) ; j++ ) {
if ( vis[ list1.get ( j) ] == 0 )
mat[ curr] [ list1.get ( j) ] = 1 ;
}
}
System .
out .
println ( "Case " + cs
++ + ":" ) ; for ( i= 0 ; i< 2 * n+ 1 ; i++ ) {
for ( j= 0 ; j< 2 * n+ 1 ; j++ ) {
if ( i% 2== 0 ) {
if ( j== 0 || j== 2 * n) {
}
else {
}
}
else {
if ( j% 2== 0 ) {
}
else {
x= i/ 2 ;
y= j/ 2 ;
ch= mat[ x] [ y] == 1 ? 'Y' : 'N' ;
}
}
}
}
list1.clear ( ) ;
list.clear ( ) ;
}
}
}
CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CgkKCWZpbmFsIHN0YXRpYyBpbnQgU0laRT0xMTA7CgkKCXN0YXRpYyBBcnJheUxpc3Q8QXJyYXlMaXN0PEludGVnZXI+PiBsaXN0PW5ldyBBcnJheUxpc3QoKTsKCXN0YXRpYyBBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdDE9bmV3IEFycmF5TGlzdCgpOwoJc3RhdGljIGludCB2aXNbXT1uZXcgaW50W1NJWkVdLCBjdXJyOwoJc3RhdGljIGludCBtYXRbXVtdPW5ldyBpbnRbU0laRV1bU0laRV07CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBkZnMoaW50IG5vZGUpIHsKCQkKCQl2aXNbbm9kZV09MTsKCQlsaXN0MS5hZGQobm9kZSk7CgkJaW50IGw9bGlzdC5nZXQobm9kZSkuc2l6ZSgpOwoJCWludCBpLHY7CgkJZm9yKGk9MDtpPGw7aSsrKSB7CgkJCQoJCQl2PWxpc3QuZ2V0KG5vZGUpLmdldChpKTsKCQkJaWYodmlzW3ZdPT0wKSB7CgkJCQkKCQkJCXZpc1t2XT0xOwoJCQkJZGZzKHYpOwoJCQl9CgkJfQoJfQoJCglzdGF0aWMgdm9pZCBkZnMxKGludCBub2RlKSB7CgkJCgkJdmlzW25vZGVdPTE7CgkJaW50IGksdSxsPWxpc3QuZ2V0KG5vZGUpLnNpemUoKTsKCQlmb3IoaT0wO2k8bDtpKyspIHsKCQkJCgkJCXU9bGlzdC5nZXQobm9kZSkuZ2V0KGkpOwoJCQlpZih2aXNbdV09PTAgJiYgdSE9Y3VycikgewoJCQkJCgkJCQl2aXNbdV09MTsKCQkJCWRmczEodSk7CgkJCX0KCQl9Cgl9CgoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCQoJCVNjYW5uZXIgc2M9bmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCQkKCQlpbnQgdD1zYy5uZXh0SW50KCksbjsKCQlpbnQgaSxqLHYsY250LHgseSxjcz0xOwoJCWNoYXIgY2g7CgkJd2hpbGUodC0tPjApIHsKCQkJCgkJCW49c2MubmV4dEludCgpOwoJCQlmb3IoaT0wO2k8bjtpKyspIHsKCQkJCQoJCQkJQXJyYXlMaXN0PEludGVnZXI+IHRtcExpc3Q9bmV3IEFycmF5TGlzdCgpOwoJCQkJdmlzW2ldPTA7CgkJCQlmb3Ioaj0wO2o8bjtqKyspIHsKCQkJCQkKCQkJCQl2PXNjLm5leHRJbnQoKTsKCQkJCQlpZih2PT0xKQoJCQkJCQl0bXBMaXN0LmFkZChqKTsKCQkJCQltYXRbaV1bal09MDsKCQkJCX0KCQkJCWxpc3QuYWRkKHRtcExpc3QpOwoJCQl9CgkJCQoJCQlkZnMoMCk7CgkJCQoJCQlmb3IoaT0wO2k8bGlzdDEuc2l6ZSgpO2krKykgewoJCQkJCgkJCQlmb3Ioaj0wO2o8bGlzdDEuc2l6ZSgpO2orKykKCQkJCQl2aXNbbGlzdDEuZ2V0KGopXT0wOwoJCQkJCgkJCQljdXJyPWxpc3QxLmdldChpKTsKCQkJCWlmKGN1cnIhPTApCgkJCQkJZGZzMSgwKTsKCQkJCQoJCQkJZm9yKGo9MDtqPGxpc3QxLnNpemUoKTtqKyspIHsKCQkJCQkKCQkJCQlpZih2aXNbbGlzdDEuZ2V0KGopXT09MCkgCgkJCQkJCW1hdFtjdXJyXVtsaXN0MS5nZXQoaildPTE7CgkJCQl9CgkJCX0KCQkJU3lzdGVtLm91dC5wcmludGxuKCJDYXNlICIgKyBjcysrICsgIjoiKTsKCQkJZm9yKGk9MDtpPDIqbisxO2krKykgewoJCQkJCgkJCQlmb3Ioaj0wO2o8MipuKzE7aisrKSB7CgkJCQkJCgkJCQkJaWYoaSUyPT0wKSB7CgkJCQkJCQoJCQkJCQlpZihqPT0wfHxqPT0yKm4pIHsKCQkJCQkJCQoJCQkJCQkJU3lzdGVtLm91dC5wcmludCgiKyIpOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJCgkJCQkJCQlTeXN0ZW0ub3V0LnByaW50KCItIik7CgkJCQkJCX0KCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCQoJCQkJCQlpZihqJTI9PTApIHsKCQkJCQkJCQoJCQkJCQkJU3lzdGVtLm91dC5wcmludCgifCIpOwoJCQkJCQl9CgkJCQkJCWVsc2UgewoJCQkJCQkJCgkJCQkJCQl4PWkvMjsKCQkJCQkJCXk9ai8yOwoJCQkJCQkJY2g9bWF0W3hdW3ldPT0xPydZJzonTic7CgkJCQkJCQlTeXN0ZW0ub3V0LnByaW50KGNoKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIik7CgkJCX0KCQkJbGlzdDEuY2xlYXIoKTsKCQkJbGlzdC5jbGVhcigpOwoJCX0KCX0KfQo=