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 Python (3.4.3) (judge verdict: Wrong Answer)

import copy
n,m = list(map(int, input().split()))
A = [[int(i) for i in input().split()] for n in range(n)]

ngset = {}
for i in range(n):
  tmp = []
  for j in range(1,m+1):
    tmp.append((i*m+j)) 
  for k in tmp:
    ngset[k] = tmp

ngs = {}
for i, aa in enumerate(A):
  if i == 0:
    for j, a in enumerate(aa):
      ngs[j] = []
      ngs[j].extend(ngset[a])
  else:
    for j, a in enumerate(aa):
      if a in ngs[j]:
        k = 0
        if j+1 < m:
          for jtmp in range(j+1, m):
            if A[i][j] not in ngs[jtmp] and A[i][jtmp] not in ngs[j]:
              k = jtmp
              break
        if k != 0:
          for jtmp in range(j, -1, -1):
            if A[i][j] not in ngs[jtmp] and A[i][jtmp] not in ngs[j]:
              k = jtmp
              break
        A[i][j] , A[i][k] = A[i][k], A[i][j]
    for j, a in enumerate(aa):
      ngs[j].extend(ngset[a])
B = copy.deepcopy(A)
import numpy as np
A = np.array(A)
for i in range(m):
  A[:,i].sort()
for i in range(n):
  text = ""
  for j in range(m):
    text += str(B[i][j]) + " "
  print(text[:-1])
for i in range(n):
  text = ""
  for j in range(m):
    text += str(A[i][j]) + " "
  print(text[:-1])