#pragma GCC optimize ("O3,inline,omit-frame-pointer,no-asynchronous-unwind-tables,fast-math") #include #include #include using namespace std; #define rep(i, a, n) for(ll i = a; i < n; i++) #define rrep(i, a, n) for(ll i = a; i >= n; i--) #define inr(l, x, r) (l <= x && x < r) #define ll long long #define ld long double #define pii pair #define pll pair #define all(x) (x).begin(), (x).end() //constexpr ll MOD = 1000000007; constexpr ll MOD = 998244353; constexpr int IINF = 1001001001; constexpr ll INF = 1LL<<60; template void chmax(t&a,u b){if(a void chmin(t&a,u b){if(b> n; vector> a(n,vector(n)); ll ss = 0; rep(i,0,n)rep(j,0,n) cin >> a[i][j], ss += a[i][j]; if(ss%n != 0){ cout << -1 << endl; return; } if(n%2 == 0){ vector path; ll all = n*n; path.reserve(all); rep(i,0,n) path.push_back({i,0}); rrep(i,n-1,0){ if(i%2 == 1){ rep(j,1,n) path.push_back({i,j}); }else{ rrep(j,n-1,1) path.push_back({i,j}); } } vector sum(all*2+1); rep(i,0,all*2) sum[i+1] = (sum[i]+a[path[i%all].first][path[i%all].second])%n; vector cnt(n,0), first(n,INF); rep(i,0,all+1){ cnt[sum[i]]++; chmin(first[sum[i]],i); } vector> ans(n,vector(n)); rep(i,0,n){ if(cnt[i] <= n) continue; ll start = first[i], now = 1, id = start; while(id < start+all){ if(id != start && sum[id] == i && now < n) now++; auto [x,y] = path[id%all]; // cerr << id << " " << x << " " << y << " " << now << endl; ans[x][y] = now; id++; } rep(j,0,n){ rep(k,0,n) cout << ans[j][k] << " "; cout << endl; } break; } }else{ vector path; ll all = n*(n-1)+2; path.reserve(all); rep(i,0,n) path.push_back({i,0}); rep(i,2,n) a[n-2][n-1] += a[n-1][i]; path.push_back({n-1,1}); rrep(i,n-2,0){ if(i%2 == 1){ rep(j,1,n) path.push_back({i,j}); }else{ rrep(j,n-1,1) path.push_back({i,j}); } } vector sum(all*2+1); rep(i,0,all*2) sum[i+1] = (sum[i]+a[path[i%all].first][path[i%all].second])%n; vector cnt(n,0), first(n,INF); rep(i,0,all){ cnt[sum[i]]++; chmin(first[sum[i]],i); } vector> ans(n,vector(n)); rep(i,0,n){ if(cnt[i] < n) continue; ll start = first[i], now = 1, id = start; while(id < start+all){ if(id != start && sum[id] == i && now < n) now++; auto [x,y] = path[id%all]; // cerr << id << " " << x << " " << y << " " << now << endl; ans[x][y] = now; id++; } rep(j,2,n) ans[n-1][j] = ans[n-2][n-1]; rep(j,0,n){ rep(k,0,n) cout << ans[j][k] << " "; cout << endl; } break; } } } int main() { ios::sync_with_stdio(false); std::cin.tie(nullptr); ll t; cin >> t; while(t--){ solve(); } return 0; }