https://www.acwing.com/problem/content/705/
#include<bits/stdc++.h>
using namespace std;
const int N=60;
bool line[N],lie[N],ju[N];
int a[N][N];
int t,n;
bool checkhl(){
for(int i=1;i<=n*n;i++){
memset(line,false ,sizeof line);
memset(lie,false ,sizeof lie);
for(int j=1;j<=n*n;j++){
line[a[i][j]]=true;
lie[a[j][i]]=true;
}
for(int k=1;k<=n*n;k++){
if(line[k]==false||lie[k]==false)return false;
}
}
return true;
}
bool checkju(){
int p=n*n;
int i=1;
while(p--){
memset(ju,false ,sizeof ju);
for(int k=((i-1)/n)*n+1;k<((i-1)/n)*n+1+n;k++)
{
for(int j=((i-1)%n)*n+1;j<((i-1)%n)*n+1+n;j++)
{
ju[a[k][j]]=true;
}
}
for(int k=1;k<=n*n;k++){
if(ju[k]==false)return false;
}
i++;
}
return true;
}
int main(){
cin>>t;
// int t;
int f=1;
while(t--){
scanf("%d",&n);
for(int i=1;i<=n*n;i++){
for(int j=1;j<=n*n;j++){
scanf("%d",&a[i][j]);
}
}
char s[5];
if(checkju()&&checkhl())
{
strcpy(s,"Yes");
}//Case #1: Yes
else {
strcpy(s,"No");
}
printf("Case #%d: %s\n",f++,s);
}
return 0;
}