Problem:
Score : 1100 points

Problem Statement

We have a grid with N rows and M columns of squares.
Each integer from 1 to NM is written in this grid once.
The number written in the square at the i-th row from the top and the j-th column from the left is A_{ij}.

You need to rearrange these numbers as follows:

First, for each of the N rows, rearrange the numbers written in it as you like.

Second, for each of the M columns, rearrange the numbers written in it as you like.

Finally, for each of the N rows, rearrange the numbers written in it as you like.

After rearranging the numbers, you want the number written in the square at the i-th row from the top and the j-th column from the left to be M\times (i-1)+j.
Construct one such way to rearrange the numbers. The constraints guarantee that it is always possible to achieve the objective.

Constraints

1 \leq N,M \leq 100

1 \leq A_{ij} \leq NM

A_{ij} are distinct.

Input

Input is given from Standard Input in the following format:

N M
A_{11} A_{12} ... A_{1M}
:
A_{N1} A_{N2} ... A_{NM}

Output

Print one way to rearrange the numbers in the following format:

B_{11} B_{12} ... B_{1M}
:
B_{N1} B_{N2} ... B_{NM}
C_{11} C_{12} ... C_{1M}
:
C_{N1} C_{N2} ... C_{NM}

Here B_{ij} is the number written in the square at the i-th row from the top and the j-th column from the left after Step 1, and C_{ij} is the number written in that square after Step 2.

Sample Input 1

3 2
2 6
4 3
1 5

Sample Output 1

2 6
4 3
5 1
2 1
4 3
5 6

Sample Input 2

3 4
1 4 7 10
2 5 8 11
3 6 9 12

Sample Output 2

1 4 7 10
5 8 11 2
9 12 3 6
1 4 3 2
5 8 7 6
9 12 11 10

Solution in C (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <limits.h>
int acs(const void *a, const void *b){return *(int*)a - *(int*)b;} /* 1,2,3,4.. */
int des(const void *a, const void *b){return *(int*)b - *(int*)a;} /* 8,7,6,5.. */
#define min(a,b) (a < b ? a: b)
#define max(a,b) (a > b ? a: b)

#define MAXN (101)
#define MOD (998244353)

int a[MAXN][MAXN];
int b[MAXN][MAXN];
int c[MAXN][MAXN];

int ind[MAXN*MAXN];
int ind2[MAXN*MAXN];

int main(void)
{
    int n,m;
    scanf("%d %d",&n, &m);

    for(int i=0;i<n;i++)for(int j=0;j<m;j++)
    {
        int val;
        scanf("%d", &val);
        ind[val] = i;
        a[i][j] = val;
    }

    for(int j=0;j<m;j++)
    {
        bool check[n];
        for(int i=0;i<n;i++) check[i] = false;

        for(int i=0;i<n;i++)
        {
            int val = i*m+j+1;
            int k;
            for(k=0;k<m;k++)
            {
                if( (a[i][k] != 0) && ( check[(a[i][k]-1)/m] == false ))
                {
                    check[(a[i][k]-1)/m] = true;
                    b[i][j] = a[i][k];
                    ind2[a[i][k]] = j;
                    a[i][k] = 0;
                    break;
                }
            }
//            if(k==m) return 1;
        }
    }

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            int val = i*m+j+1;
 //           if(c[i][ind2[val]]!=0) return 1;
            c[i][ind2[val]] = val;
        }
    }

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            printf("%d ",c[i][j]);
        }
        printf("\n");
    }


    return 0;
}