#include <bits/stdc++.h>
using namespace std;

template <typename A, typename B>string to_string(pair<A, B> p);template <typename A, typename B, typename C>string to_string(tuple<A, B, C> p);template <typename A, typename B, typename C, typename D>string to_string(tuple<A, B, C, D> p);string to_string(const string& s) {  return '"' + s + '"';}string to_string(const char* s) {  return to_string((string) s);}string to_string(bool b) {  return (b ? "true" : "false");}string to_string(vector<bool> v) {  bool first = true;  string res = "{";  for (int i = 0; i < static_cast<int>(v.size()); i++) {    if (!first) {      res += ", ";    }    first = false;    res += to_string(v[i]);  }  res += "}";  return res;}template <size_t N>string to_string(bitset<N> v) {  string res = "";  for (size_t i = 0; i < N; i++) {    res += static_cast<char>('0' + v[i]);  }  return res;}template <typename A>string to_string(A v) {  bool first = true;  string res = "{";  for (const auto &x : v) {    if (!first) {      res += ", ";    }    first = false;    res += to_string(x);  }  res += "}";  return res;}template <typename A, typename B>string to_string(pair<A, B> p) {  return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";}template <typename A, typename B, typename C>string to_string(tuple<A, B, C> p) {  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")";}template <typename A, typename B, typename C, typename D>string to_string(tuple<A, B, C, D> p) {  return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";}void debug_out() { cerr << endl; }template <typename Head, typename... Tail>void debug_out(Head H, Tail... T) {  cerr << " " << to_string(H);  debug_out(T...);}

#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif

#define set0(x) memset(x,0,sizeof(x))
#define F first
#define S second
#define PB push_back
#define MP make_pair
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()

typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
template<typename T> void read(T &x){
	x = 0;char ch = getchar();ll f = 1;
	while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}
	while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args) {
	read(first);
	read(args...);
}

int n,m,A[110][110],B[110][110];
vector<int> cnt[110][110];
vector<int> G[110];
int vis[110] = {0},btoa[110] = {0},btob[110];
bool dfs(int num){
    if(vis[num])return false;vis[num] = 1;
    for(auto ct:G[num]){
        if(btoa[ct] == 0 || dfs(btoa[ct])){
            btoa[ct] = num;
            btob[num] = ct;
            return true;
        }
    }
    return false;
}
int main() {
    read(n,m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            read(A[i][j]);
            cnt[i][(A[i][j]-1)/m+1].PB(A[i][j]);
         //   cout<<i<<' '<<(A[i][j]-1)/m+1<<endl;
        }
    }
    for(int i=1;i<=m;i++){
        for(int a=1;a<=n;a++){
            G[a].clear();
            for(int b=1;b<=n;b++){
                if(cnt[b][a].size()){
                    G[a].PB(b);
        //            cout<<a<<"->"<<b<<endl;
                }
            }
        }
        set0(btoa);
        for(int j=1;j<=n;j++){
            set0(vis);
            assert(dfs(j));
        }
        for(int j=1;j<=n;j++){
            B[btob[j]][i] = cnt[btob[j]][j].back();
            cnt[btob[j]][j].pop_back();
        }
      //  for(int j=1;j<=n;j++)cout<<"H "<<B[j][i]<<"\n";
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)cout<<B[i][j]<<" \n"[j == m];
    }
    for(int k=1;k<=m;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n-1;j++)if(B[j][k]>B[j+1][k])swap(B[j][k],B[j+1][k]);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)cout<<B[i][j]<<" \n"[j == m];
    }
	return 0;
}


Measured memory_bytes: 1024