#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
if(!(cin>>T)) return 0;
while(T--){
int n; cin>>n;
vector<ll>a(n);
for(int i=0;i<n;i++) cin>>a[i];
// tìm 1 chỉ số chứa giá trị lớn nhất (chọn first max)
int pos = 0;
for(int i=1;i<n;i++) if(a[i] > a[pos]) pos = i;
// xoay vòng (b là dãy bắt đầu từ pos), keep map -> original index
vector<ll> b(n);
vector<int> idx(n);
for(int i=0;i<n;i++){
int p = (pos + i) % n;
b[i] = a[p];
idx[i] = p; // b[i] corresponds to original index p
}
// Build max-Cartesian tree on linear array b[0..n-1]
vector<int> parent(n, -1);
vector<int> st;
for(int i=0;i<n;i++){
int last = -1;
// use <= to break ties consistently (equal values handled)
while(!st.empty() && b[st.back()] <= b[i]){
last = st.back();
st.pop_back();
}
if(!st.empty()) parent[i] = st.back(); // nearest greater on left
if(last != -1) parent[last] = i; // last popped -> parent is i (nearest greater on right)
st.push_back(i);
}
// count children
vector<int> child(n,0);
for(int i=0;i<n;i++){
if(parent[i] != -1) child[parent[i]]++;
}
// compute contributions back to original ordering
vector<ll> contrib(n, 0);
for(int i=0;i<n;i++){
int orig = idx[i];
contrib[orig] = b[i] * 1ll * child[i];
}
// print contributions (per phần tử, theo thứ tự ban đầu)
for(int i=0;i<n;i++){
if(i) cout << ' ';
cout << contrib[i];
}
cout << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgVDsgCiAgICBpZighKGNpbj4+VCkpIHJldHVybiAwOwogICAgd2hpbGUoVC0tKXsKICAgICAgICBpbnQgbjsgY2luPj5uOwogICAgICAgIHZlY3RvcjxsbD5hKG4pOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspIGNpbj4+YVtpXTsKCiAgICAgICAgLy8gdMOsbSAxIGNo4buJIHPhu5EgY2jhu6lhIGdpw6EgdHLhu4sgbOG7m24gbmjhuqV0IChjaOG7jW4gZmlyc3QgbWF4KQogICAgICAgIGludCBwb3MgPSAwOwogICAgICAgIGZvcihpbnQgaT0xO2k8bjtpKyspIGlmKGFbaV0gPiBhW3Bvc10pIHBvcyA9IGk7CgogICAgICAgIC8vIHhvYXkgdsOybmcgKGIgbMOgIGTDo3kgYuG6r3QgxJHhuqd1IHThu6sgcG9zKSwga2VlcCBtYXAgLT4gb3JpZ2luYWwgaW5kZXgKICAgICAgICB2ZWN0b3I8bGw+IGIobik7CiAgICAgICAgdmVjdG9yPGludD4gaWR4KG4pOwogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgICAgICBpbnQgcCA9IChwb3MgKyBpKSAlIG47CiAgICAgICAgICAgIGJbaV0gPSBhW3BdOwogICAgICAgICAgICBpZHhbaV0gPSBwOyAvLyBiW2ldIGNvcnJlc3BvbmRzIHRvIG9yaWdpbmFsIGluZGV4IHAKICAgICAgICB9CgogICAgICAgIC8vIEJ1aWxkIG1heC1DYXJ0ZXNpYW4gdHJlZSBvbiBsaW5lYXIgYXJyYXkgYlswLi5uLTFdCiAgICAgICAgdmVjdG9yPGludD4gcGFyZW50KG4sIC0xKTsKICAgICAgICB2ZWN0b3I8aW50PiBzdDsKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgaW50IGxhc3QgPSAtMTsKICAgICAgICAgICAgLy8gdXNlIDw9IHRvIGJyZWFrIHRpZXMgY29uc2lzdGVudGx5IChlcXVhbCB2YWx1ZXMgaGFuZGxlZCkKICAgICAgICAgICAgd2hpbGUoIXN0LmVtcHR5KCkgJiYgYltzdC5iYWNrKCldIDw9IGJbaV0pewogICAgICAgICAgICAgICAgbGFzdCA9IHN0LmJhY2soKTsKICAgICAgICAgICAgICAgIHN0LnBvcF9iYWNrKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoIXN0LmVtcHR5KCkpIHBhcmVudFtpXSA9IHN0LmJhY2soKTsgICAgIC8vIG5lYXJlc3QgZ3JlYXRlciBvbiBsZWZ0CiAgICAgICAgICAgIGlmKGxhc3QgIT0gLTEpIHBhcmVudFtsYXN0XSA9IGk7ICAgICAgICAgICAvLyBsYXN0IHBvcHBlZCAtPiBwYXJlbnQgaXMgaSAobmVhcmVzdCBncmVhdGVyIG9uIHJpZ2h0KQogICAgICAgICAgICBzdC5wdXNoX2JhY2soaSk7CiAgICAgICAgfQoKICAgICAgICAvLyBjb3VudCBjaGlsZHJlbgogICAgICAgIHZlY3RvcjxpbnQ+IGNoaWxkKG4sMCk7CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgIGlmKHBhcmVudFtpXSAhPSAtMSkgY2hpbGRbcGFyZW50W2ldXSsrOwogICAgICAgIH0KCiAgICAgICAgLy8gY29tcHV0ZSBjb250cmlidXRpb25zIGJhY2sgdG8gb3JpZ2luYWwgb3JkZXJpbmcKICAgICAgICB2ZWN0b3I8bGw+IGNvbnRyaWIobiwgMCk7CiAgICAgICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgICAgIGludCBvcmlnID0gaWR4W2ldOwogICAgICAgICAgICBjb250cmliW29yaWddID0gYltpXSAqIDFsbCAqIGNoaWxkW2ldOwogICAgICAgIH0KCiAgICAgICAgLy8gcHJpbnQgY29udHJpYnV0aW9ucyAocGVyIHBo4bqnbiB04butLCB0aGVvIHRo4bupIHThu7EgYmFuIMSR4bqndSkKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICAgICAgaWYoaSkgY291dCA8PCAnICc7CiAgICAgICAgICAgIGNvdXQgPDwgY29udHJpYltpXTsKICAgICAgICB9CiAgICAgICAgY291dCA8PCAnXG4nOwogICAgfQogICAgcmV0dXJuIDA7Cn0K