

#include "bits/stdc++.h"

using namespace std;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define trav(a,x) for (auto& a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)

#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template<class T> bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001; //check the limits, dummy

int main() {
    //freopen("input.txt", "r", stdin);
    ios_base::sync_with_stdio(0); cin.tie(0);

    int T; cin >> T;
    while(T--) {
        int N; cin >> N;
        vector<string> A(N); F0R(i, N) {
            cin >> A[i];
            //debug(A[i]);
        }
        bool good[N][N];
        F0R(i, N) F0R(j, N) good[i][j] = false;
        F0R(x, 10) {
            F0R(i, N) {
                F0R(j, N) {
                    if (A[i][j] - '0' == x) {
                        good[i][j] = true; break;
                    }
                }
                F0Rd(j, N) {
                    if (A[i][j] - '0' == x) {
                        good[i][j] = true; break;
                    }
                }
            }
            F0R(j, N) {
                F0R(i, N) {
                    if (A[i][j] - '0' == x) {
                        good[i][j] = true; break;
                    }
                }
                F0Rd(i, N) {
                    if (A[i][j] - '0' == x) {
                        good[i][j] = true; break;
                    }
                }
            }
        }

        vpi pos[10];
        F0R(i, N) {
            F0R(j, N) {
                if (good[i][j]) {
                    int cur = A[i][j] - '0';
                    //debug(cur, A[i][j]);
                    pos[cur].pb({i, j});
                }
                //cout << good[i][j] << " ";
            }
            //cout << "\n";
        }

        F0R(x, 10) {
            int ans = 0;
            //debug(pos[x].size());
            F0R(i, sz(pos[x])) {
                FOR(j, i+1, sz(pos[x])) {
                    pi X = pos[x][i], Y = pos[x][j];
                    //debug(X.f, X.s, Y.f, Y.s);
                    if (X.f == Y.f) {
                        ckmax(ans, abs(X.s - Y.s) * max(X.f, N-1-X.f));
                    } else if (X.s == Y.s) {
                        ckmax(ans, abs(X.f - Y.f) * max(X.s, N-1-X.s));
                    } else {
                        ckmax(ans, max(abs(X.s-Y.s)*max(max(X.f, Y.f), N-1-min(X.f, Y.f)), abs(X.f-Y.f)*max(max(X.s, Y.s), N-1-min(X.s, Y.s))));
                    }
                }
            }
            cout << ans << " ";
        }
        cout << nl;
    }

    return 0;
}

// read the question correctly (ll vs int)
// template by bqi343


