結果

問題 No.3732 Labyrinth Maker
コンテスト
ユーザー kidodesu
提出日時 2026-09-19 14:37:10
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
RE  
実行時間 -
コード長 1,240 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 67 ms
コンパイル使用メモリ 82,324 KB
実行使用メモリ 234,108 KB
最終ジャッジ日時 2026-09-19 14:37:45
合計ジャッジ時間 29,301 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 10 RE * 49
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from atcoder.dsu import DSU
def main():
    n = int(input())
    A = [list(map(int, input().split())) for _ in range(n)]
    a = 0
    for aa in A:
        a += sum(aa)
    if a % n: return [[]]
    uf = DSU(n*n)
    X = [0] * n
    for y in range(n):
        for x in range(n):
            if X[x]:
                X[x] += A[y][x]
                uf.merge((y-1)*n+x, y*n+x)
            else:
                X[x] = A[y][x]
        if y == n-1: break
        D = {}
        t = 0
        D[t] = 0
        for x in range(n):
            t += X[x]
            t %= n
            if t in D:
                l = D[t]
                r = x+1
                break
            D[t] = x+1
        for u in range(l, r-1):
            uf.merge(y*n+y, y*n+u+1)
            X[u] = 0
        X[r-1] = 0
    for u in range(n-1):
        uf.merge(n*n+u-n, n*n+u-n+1)
    Ans = [[-1] * n for _ in range(n)]
    i = 1
    for g in uf.groups():
        s = 0
        for u in g:
            Ans[u//n][u%n] = i
            s += A[u//n][u%n]
            s %= n
        assert not s
        i += 1
    return Ans

for _ in range(int(input())):
    Ans = main()
    if not Ans[0]:
        print(-1)
    else:
        for ans in Ans:
            print(*ans)
    
0