#include <bits/stdc++.h>
using namespace std;
#define N 210
#define M 200010
#define inf 2147483647
#define col(x) (((x-1)/m)+1)
inline int read() {
    int x=0;
    char ch=getchar();
    while (!isdigit(ch)) ch=getchar();
    while (isdigit(ch)) x=x*10+ch-'0',ch=getchar();
    return x;
}
int tot=1;
int fir[N],nex[M],got[M],tak[M];
inline void AddEdge(int x,int y,int z) { 
    nex[++tot]=fir[x],fir[x]=tot,got[tot]=y,tak[tot]=z; 
} 
int a[N][N],b[N][N];
vector <int> v[N][N];
int dep[N],que[N];
inline int bfs(int s,int t) {
	memset(dep,0,sizeof(dep));
	int l=1,r=1;
	dep[s]=1,que[1]=s;
	while (l<=r) {
		int x=que[l++];
		for (int i=fir[x];i;i=nex[i]) {
			int y=got[i];
			if (dep[y] || !tak[i]) continue;
			dep[y]=dep[x]+1,que[++r]=y;
		}
	}
	return dep[t];
}
inline int dfs(int x,int t,int flow) {
	int rest=flow;
	if (x==t) return flow;
	for (int i=fir[x];i && rest;i=nex[i]) {
		int y=got[i];
		if (!tak[i] || dep[y]!=dep[x]+1) continue;
		int k=dfs(y,t,min(rest,tak[i]));
		if (!k) dep[y]=0;
		tak[i]-=k,tak[i^1]+=k,rest-=k;
	}
	return flow-rest;
}
int main() {
    int n=read(),m=read();
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++) {
            a[i][j]=read();
            v[i][col(a[i][j])].push_back(a[i][j]);
        }
    for (int w=1;w<=m;w++) {
        tot=1;
        memset(fir,0,sizeof(fir));
        for (int i=1;i<=n;i++)
            for (int j=1;j<=n;j++) if (v[i][j].size()) {
                    AddEdge(i,j+n,1),AddEdge(j+n,i,0);
                }
        int s=2*n+1,t=s+1;
        for (int i=1;i<=n;i++)
            AddEdge(s,i,1),AddEdge(i,s,0),
            AddEdge(t,i+n,0),AddEdge(i+n,t,1);
        while (bfs(s,t)) dfs(s,t,inf);
        for (int i=1;i<=n;i++) {
            for (int j=fir[i];j;j=nex[j]) {
                if (got[j]>n && !tak[j]) b[i][w]=v[i][got[j]-n].back(),v[i][got[j]-n].pop_back();
            }
        }
    }
    for (int i=1;i<=n;i++,putchar('\n'))
        for (int j=1;j<=m;j++) printf("%d ",a[col(b[i][j])][j]=b[i][j]);
    for (int i=1;i<=n;i++,putchar('\n'))
        for (int j=1;j<=m;j++) printf("%d ",a[i][j]);
    return 0;
}