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 PyPy3 (2.4.0) (judge verdict: Wrong Answer)

from collections import defaultdict

def sol():
    N, M = map(int, input().split())
    chart = [(-1, -1) for _ in range(N * M + 1)]
    A = [[0 for  _ in range(M)] for _ in range(N)]

    for i in range(N):
        line = list(map(int, input().split()))
        for j in range(M):
            chart[line[j]] = (i, j)
            A[i][j] = line[j]

    go = [[0 for _ in range(M)] for _ in range(N)]

    for i in range(N):
        for j in range(M):
            fri, frj = chart[M * i + (j + 1)]
            go[fri][frj] = (i, j)

    rowList = [0 for _ in range(M)]
    for col in range(M):
        rowList[col] = defaultdict(int)
        for row in range(N):
            rowList[col][go[row][col][0]] += 1

    for col in range(M):
        row = 0
        for row in range(N):
            if rowList[col][row] > 1:
                for chRow in range(N):
                    if row == go[chRow][col][0]:
                        for swapCol in range(col + 1, M):
                            if rowList[swapCol][go[chRow][col][0]] < 1:
                                rowList[col][go[chRow][col][0]] -= 1
                                rowList[col][go[chRow][swapCol][0]] += 1

                                rowList[swapCol][go[chRow][swapCol]] -= 1
                                rowList[swapCol][go[chRow][col][0]] += 1

                                A[chRow][swapCol], A[chRow][col] = A[chRow][col], A[chRow][swapCol]
                                go[chRow][swapCol], go[chRow][col] = go[chRow][col], go[chRow][swapCol]


    for i in range(N):
        print(*A[i])

    for col in range(M):
        for row in range(N):
            toRow = go[row][col][0]
            if toRow == row:
                continue
            A[toRow][col], A[row][col] = A[row][col], A[toRow][col]
            go[toRow][col], go[row][col] = go[row][col], go[toRow][col]

    for i in range(N):
        print(*A[i])

sol()