#include<bits/stdc++.h>
using namespace std;
const int maxn=2E4+5;
int n,m,a[105][105],b[105][105],c[105][105];
namespace flow
{
	int size,head[maxn];
	int S,T,dfn[maxn];
	struct edge
	{
		int to,next,w,id;
	}E[maxn*2];
	inline void addE(int u,int v,int w,int id)
	{
		E[++size].to=v;
		E[size].next=head[u];
		E[size].w=w;
		E[size].id=id;
		head[u]=size;
	}
	inline void add(int u,int v,int w,int id)
	{
		addE(u,v,w,id);
		addE(v,u,0,id);
	}
	inline void clear()
	{
		memset(head,0,sizeof(head));
		memset(E,0,sizeof(E));
		size=1;
	}
	inline bool bfs()
	{
		for(int i=0;i<=T;++i)
			dfn[i]=-1;
		queue<int>Q;
		Q.push(S);
		dfn[S]=0;
		while(!Q.empty())
		{
			int u=Q.front();
			Q.pop();
			for(int i=head[u];i;i=E[i].next)
			{
				int v=E[i].to;
				if(E[i].w==0||dfn[v]!=-1)
					continue;
				dfn[v]=dfn[u]+1;
				Q.push(v);
			}
		}
		return dfn[T]!=-1;
	}
	int dfs(int u,int up)
	{
		if(u==T)
			return up;
		int s=0;
		for(int i=head[u];i;i=E[i].next)
		{
			int v=E[i].to;
			if(dfn[v]!=dfn[u]+1||E[i].w==0)
				continue;
			int g=dfs(v,min(E[i].w,up-s));
			E[i].w-=g;
			E[i^1].w+=g;
			s+=g;
			if(g==0)
				dfn[v]=-1;
			if(s==up)
				break;
		}
		return s;
	}
	inline void solve()
	{
		int s=0;
		while(bfs())
			s+=dfs(S,123456);
		assert(s==n);
	}
}
inline int get(int x)
{
	return (x-1)/m+1;
}
bool used[105*105];
inline void solve()
{
	for(int e=1;e<=m;++e)
	{
		flow::clear();
		flow::S=0;
		flow::T=2*n+1;
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j)
				if(!used[a[i][j]])
					flow::add(i,n+get(a[i][j]),1,a[i][j]);
		for(int i=1;i<=n;++i)
			flow::add(0,i,1,0),flow::add(i+n,2*n+1,1,0);
		flow::solve();
		using namespace flow;
		for(int u=1;u<=n;++u)
			for(int i=head[u];i;i=E[i].next)
				if(E[i].w==0)
				{
					used[E[i].id]=1;
					b[u][e]=E[i].id;
					c[get(E[i].id)][e]=E[i].id;
				}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			cin>>a[i][j];
	solve();
	for(int i=1;i<=n;++i,cout<<endl)
		for(int j=1;j<=m;++j)
			cout<<b[i][j]<<" ";
	for(int i=1;i<=n;++i,cout<<endl)
		for(int j=1;j<=m;++j)
			cout<<c[i][j]<<" ";
	return 0;
}
