#include <bits/stdc++.h>
using namespace std;
#define int long long
#define dd double
#define ld long double
#define ull unsigned long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define el "\n"
#define fast ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fix(x) cout << fixed << setprecision(x)
#define all(v) v.begin(),v.end()
#define dpp(v,val) memset(v,val,sizeof(v))
#define mod 1e9+7
const int N = 1e5 + 5;
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } // log(n) __gcd(a,b)
int n;
vector<vector<int>>v;
int cnt=0;
int f=1;
void rec( vector<vector<int>> &v,int i,int j)
{
    if(i<0||j<0||i>=n||j>=n) return;
     cnt++;
     cout<<v[i][j]<<' ';
     if(cnt%n==0) cout<<el;
 
     if(i==n-1&&j==n-1) return;
     if(f==1)
     {
        if(j+1<n&&i-1>=0)
        rec(v,i-1,j+1);
        else {f=4; if(j+1<n) rec(v,i,j+1); else rec(v,i+1,j); }
     }
     else if(f==4)
     {
        if(i+1<n&&j-1>=0)
        rec(v,i+1,j-1);
        else { f=1; if(i+1<n) rec(v,i+1,j); else rec(v,i,j+1); }
     }
}
void HereWeGoAgain()
{
    cin>>n;
    v.resize(n);
    for(int i=0;i<n;i++)
    v[i].resize(n);
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    cin>>v[i][j];
    rec(v,0,0);
}
int32_t main() 
{
    fast
    int t=1;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
    HereWeGoAgain();
    }
    return 0;
    return 0;
}
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGRkIGRvdWJsZQojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgdWxsIHVuc2lnbmVkIGxvbmcgbG9uZwojZGVmaW5lIHllcyBjb3V0IDw8ICJZRVNcbiIKI2RlZmluZSBubyBjb3V0IDw8ICJOT1xuIgojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBmYXN0IGlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBmaXgoeCkgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oeCkKI2RlZmluZSBhbGwodikgdi5iZWdpbigpLHYuZW5kKCkKI2RlZmluZSBkcHAodix2YWwpIG1lbXNldCh2LHZhbCxzaXplb2YodikpCiNkZWZpbmUgbW9kIDFlOSs3CmNvbnN0IGludCBOID0gMWU1ICsgNTsKaW50IGdjZChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGIgPT0gMCA/IGEgOiBnY2QoYiwgYSAlIGIpOyB9IC8vIGxvZyhuKSBfX2djZChhLGIpCmludCBuOwp2ZWN0b3I8dmVjdG9yPGludD4+djsKaW50IGNudD0wOwppbnQgZj0xOwp2b2lkIHJlYyggdmVjdG9yPHZlY3RvcjxpbnQ+PiAmdixpbnQgaSxpbnQgaikKewogICAgaWYoaTwwfHxqPDB8fGk+PW58fGo+PW4pIHJldHVybjsKICAgICBjbnQrKzsKICAgICBjb3V0PDx2W2ldW2pdPDwnICc7CiAgICAgaWYoY250JW49PTApIGNvdXQ8PGVsOwogICAgIAogICAgIGlmKGk9PW4tMSYmaj09bi0xKSByZXR1cm47CiAgICAgaWYoZj09MSkKICAgICB7CiAgICAgICAgaWYoaisxPG4mJmktMT49MCkKICAgICAgICByZWModixpLTEsaisxKTsKICAgICAgICBlbHNlIHtmPTQ7IGlmKGorMTxuKSByZWModixpLGorMSk7IGVsc2UgcmVjKHYsaSsxLGopOyB9CiAgICAgfQogICAgIGVsc2UgaWYoZj09NCkKICAgICB7CiAgICAgICAgaWYoaSsxPG4mJmotMT49MCkKICAgICAgICByZWModixpKzEsai0xKTsKICAgICAgICBlbHNlIHsgZj0xOyBpZihpKzE8bikgcmVjKHYsaSsxLGopOyBlbHNlIHJlYyh2LGksaisxKTsgfQogICAgIH0KfQp2b2lkIEhlcmVXZUdvQWdhaW4oKQp7CiAgICBjaW4+Pm47CiAgICB2LnJlc2l6ZShuKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB2W2ldLnJlc2l6ZShuKTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICBmb3IoaW50IGo9MDtqPG47aisrKQogICAgY2luPj52W2ldW2pdOwogICAgcmVjKHYsMCwwKTsKfQppbnQzMl90IG1haW4oKSAKewogICAgZmFzdAogICAgaW50IHQ9MTsKICAgIGNpbj4+dDsKICAgIGZvcihpbnQgaT0xO2k8PXQ7aSsrKQogICAgewogICAgSGVyZVdlR29BZ2FpbigpOwogICAgfQogICAgcmV0dXJuIDA7CiAgICByZXR1cm4gMDsKfQ==