#include<bits/stdc++.h>
using namespace std;
#define maxn 1010
const int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int T,n,t[maxn][maxn];
bool vis[maxn][maxn];
struct node{
int x,y,times;
};
queue<node>q;
int main(){
cin>>T;
while(T--){
cin>>n;
memset(t,0,sizeof(t));
for(int i=1;i<=2*n-2;i++){
int fx,fy;
cin>>fx>>fy;
t[fx][fy]=i;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<t[i][j]<<" ";
cout<<endl;
}
while(!q.empty()) q.pop();
q.push((node){1,1,0});
memset(vis,false,sizeof(vis));
vis[1][1]=true;
bool flag=false;
while(!q.empty()){
node f=q.front();
q.pop();
if(f.x==n&&f.y==n){
cout<<"Yes"<<endl;
flag=true;
break;
}
for(int i=0;i<4;i++){
int fx=f.x+dx[i],fy=f.y+dy[i];
if(fx<=n&&fx>=1&&fy<=n&&fy>=1&&t[fx][fy]>=f.times&&!vis[fx][fy]){
q.push((node){fx,fy,f.times+1});
vis[fx][fy]=true;
}
}
}
if(flag) continue;
else{
cout<<"No"<<endl;
continue;
}
}
return 0;
}
/*
1
2
1 1
1 2
*/