#include using namespace std; void solve() { int N; cin >> N; vector> A(N, vector(N)); for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { cin >> A[i][j]; } } set> left, right; vector> ans(N, vector(N, 0)); // presm for(int i = 0; i < N; i++) { vector sm(N + 1, 0); vector> peak(N); peak[0].push_back(0); for(int j = 0; j < N; j++) { sm[j + 1] = (sm[j] + A[i][j]) % N; peak[sm[j + 1]].push_back(j + 1); } int l, r; for(int j = 0; j < N; j++) { if(peak[j].size() >= 2) { l = peak[j][0], r = peak[j].back(); break; } } // lr add if(l == 0 && left.size()) { for(auto [r, c] : left) { ans[r][c] = i + 1; } left.clear(); } if(r == N && right.size()) { for(auto [r, c] : right) { ans[r][c] = i + 1; } right.clear(); } // count k for(int k = l; k < r; k++) { ans[i][k] = i + 1; } // left, right for(int k = 0; k < l; k++) { left.insert({i, k}); } for(int k = r; k < N; k++) { right.insert({i, k}); } if(i < N - 1) { A[i + 1][0] += sm[l]; A[i + 1][0] %= N; A[i + 1][N - 1] += sm[N] - sm[r] + N; A[i + 1][N - 1] %= N; } } if(left.size() || right.size()) { cout << "-1\n"; return; } for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { cout << ans[i][j] << " "; } cout << "\n"; } } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int T; cin >> T; while(T--) { solve(); } return 0; }