#include<iostream>
#include<string>
#include<map>
#include<set>
#include<vector>
#define r(i,n) for(int i=0;i<n;i++)
using namespace std;
bool used[200000];
int ans[101][101],idx,s1,s2;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0},n;
vector<int>v[20000];
int main(){
  cin>>n;
  r(i,n*n*2-2*n){
    cin>>s1>>s2;
    v[s1].push_back(s2);
    v[s2].push_back(s1);
  }
  r(i,n*n+1)if(v[i].size()==2)idx=i;
  ans[0][0]=idx;
  used[idx]=1;
  r(i,n)r(j,n)if(!ans[i][j]){
    vector<int>p;
    r(k,4){
      int y=i+dy[k];
      int x=j+dx[k];
      if(y<0||x<0||y>=n||x>=n)continue;
      p.push_back(ans[y][x]);
    }
    r(k,n*n+1)if(v[k].size()==p.size()){
      if(!used[k]){
	int f=0;
	r(l,p.size())if(p[l]){
	  r(q,v[k].size()){
	    if(v[k][q]==p[l])break;
	    if(q==v[k].size()-1)f++;
	  }
	}
	if(!f){
	  ans[i][j]=k;
	  used[k]=1;
	  goto L;
	}
      }
    }L:;
  }
  r(i,n){
    r(j,n){
      if(j)cout<<' ';
      cout<<ans[i][j];
    }
    cout<<endl;
  }
}