def swap(G, i, j, dir):
di, dj = {"up": (-1, 0), "down": (1, 0), "left": (0, -1), "right": (0, 1)}[dir]
ii, jj = (i + di) % len(G), (j + dj) % len(G[i])
G[i][j], G[ii][jj] = G[ii][jj], G[i][j]
def _sort(G, vis, i, j):
vis[i][j] = True
curr = G[i][j]
for dir in ("up", "down", "left", "right"):
di, dj = {"up": (-1, 0), "down": (1, 0), "left": (0, -1), "right": (0, 1)}[dir]
ii, jj = (i + di) % len(G), (j + dj) % len(G[i])
if not vis[ii][jj]:
adj = G[ii][jj]
if curr > adj:
swap(G, i, j, dir)
_sort(G, vis, ii, jj)
def get_sorted(G):
n, m = len(G), len(G[0])
vis = [[False for _ in range(m)] for _ in range(n)]
for i in range(n):
for j in range(m):
if not vis[i][j]:
_sort(G, vis, i, j)
G = [[4, 5, 2, 2], [1, 3, 6, 4]]
get_sorted(G)
print(G)
ZGVmIHN3YXAoRywgaSwgaiwgZGlyKToKICAgIGRpLCBkaiA9IHsidXAiOiAoLTEsIDApLCAiZG93biI6ICgxLCAwKSwgImxlZnQiOiAoMCwgLTEpLCAicmlnaHQiOiAoMCwgMSl9W2Rpcl0KICAgIGlpLCBqaiA9IChpICsgZGkpICUgbGVuKEcpLCAoaiArIGRqKSAlIGxlbihHW2ldKQogICAgR1tpXVtqXSwgR1tpaV1bampdID0gR1tpaV1bampdLCBHW2ldW2pdCgpkZWYgX3NvcnQoRywgdmlzLCBpLCBqKToKICAgIHZpc1tpXVtqXSA9IFRydWUKICAgIGN1cnIgPSBHW2ldW2pdCiAgICBmb3IgZGlyIGluICgidXAiLCAiZG93biIsICJsZWZ0IiwgInJpZ2h0Iik6CiAgICAgICAgZGksIGRqID0geyJ1cCI6ICgtMSwgMCksICJkb3duIjogKDEsIDApLCAibGVmdCI6ICgwLCAtMSksICJyaWdodCI6ICgwLCAxKX1bZGlyXQogICAgICAgIGlpLCBqaiA9IChpICsgZGkpICUgbGVuKEcpLCAoaiArIGRqKSAlIGxlbihHW2ldKQogICAgICAgIGlmIG5vdCB2aXNbaWldW2pqXToKICAgICAgICAgICAgYWRqID0gR1tpaV1bampdCiAgICAgICAgICAgIGlmIGN1cnIgPiBhZGo6CiAgICAgICAgICAgICAgICBzd2FwKEcsIGksIGosIGRpcikKICAgICAgICAgICAgICAgIF9zb3J0KEcsIHZpcywgaWksIGpqKQoKCmRlZiBnZXRfc29ydGVkKEcpOgogICAgbiwgbSA9IGxlbihHKSwgbGVuKEdbMF0pCiAgICB2aXMgPSBbW0ZhbHNlIGZvciBfIGluIHJhbmdlKG0pXSBmb3IgXyBpbiByYW5nZShuKV0KICAgIGZvciBpIGluIHJhbmdlKG4pOgogICAgICAgIGZvciBqIGluIHJhbmdlKG0pOgogICAgICAgICAgICBpZiBub3QgdmlzW2ldW2pdOgogICAgICAgICAgICAgICAgX3NvcnQoRywgdmlzLCBpLCBqKQoKCgpHID0gW1s0LCA1LCAyLCAyXSwgWzEsIDMsIDYsIDRdXQpnZXRfc29ydGVkKEcpCnByaW50KEcpCg==