/*

   author : dunk_066

*/

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int mod=1e9+7;
#define FAST ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define all(c) c.begin(),c.end()
#define pb push_back
#define vi(a,x) vector<int>a(x)
#define vl(a,x) vector<ll>a(x)
#define ss second
#define ff first

const int N = 1e2+2;
vector<int>g[N];

void build(int u,int l,int r,vector<int>&a){
     if(l < 0 || r >= a.size() || r < 0 || l >= a.size()){
          return;
     }
     if(l == r){
          g[u].pb(a[l]);
          return;
     }
     int mxm = 0,pos = 0;
     for(int i = l;i <= r;i++) {
         if(a[i] > mxm) mxm = a[i],pos = i;
     }
     g[u].pb(mxm);
     if(pos != l) build(mxm, l , pos-1, a);
     if(pos != r) build(mxm, pos+1, r, a);
}

void solve(){
    int n;cin>>n;
    vi(a,n);int mxm = 0,pos = 0;
    for(int i = 0;i < n;i++) {
         cin>>a[i];
         if(a[i] > mxm) mxm = a[i],pos = i;
    }
    if(pos != 0) build(mxm, 0 , pos-1, a);
    if(pos != n-1) build(mxm, pos+1, n-1, a);
    unordered_map<int,int>mp;
    queue<int>q;
    vi(vis,n+1);
    q.push(mxm);int dist = 0;
    while(!q.empty()){
         int sz = (int)q.size();
         for(int i = 0;i < sz;i++){
              int tp = q.front();q.pop();
              mp[tp] = dist;
              vis[tp] = 1;
              for(int v:g[tp]){
                   if(vis[v] == 0) q.push(v);
              }
         }
         dist++;
    }
    for(int it:a) cout<<mp[it]<<' ';
    cout<<'\n';
    for(int i = 0;i <= n;i++) g[i].clear();
}

int main(){
        FAST;
	int t=1;cin>>t;
	while(t--)
	solve();
        #ifndef ONLINE_JUDGE
        cout << "\nTime Elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " sec\n";
        #endif
	return 0;
}

// ============== Notes =============== //
// common bugs
// - int overflow (especially intermediate expressionns)
// - array bounds (indices bigger than MAXN?)
// - special cases (n=1? graph not connected?)