#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

void solve() {
    int n;
    cin >> n;
    
    // Khởi tạo mảng kích thước n + 1 để sử dụng index từ 1 đến n
    vector<long long> a(n + 1);
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
    }
    
    // Mảng S lưu tổng hậu tố, kích thước n + 1
    vector<long long> S(n + 1, 0);
    
    // S_n = 0 theo đúng công thức phân tích
    S[n] = 0;
    
    // Tính tổng hậu tố S_i = a_i + a_{i+1} + ... + a_{n-1}
    for (int i = n - 1; i >= 1; --i) {
        S[i] = S[i + 1] + a[i];
    }
    
    // Lưu trữ các cặp {Giá trị tổng hậu tố, Vị trí ban đầu}
    vector<pair<long long, int>> S_vals(n + 1);
    for (int i = 1; i <= n; ++i) {
        S_vals[i] = {S[i], i};
    }
    
    // Sắp xếp các giá trị từ index 1 đến n tăng dần
    sort(S_vals.begin() + 1, S_vals.end());
    
    // Khôi phục hoán vị p kích thước n + 1
    vector<int> p(n + 1);
    for (int i = 1; i <= n; ++i) {
        // Gán giá trị i cho phần tử có tổng hậu tố nhỏ thứ i
        p[S_vals[i].second] = i; 
    }
    
    // In kết quả từ phần tử 1 đến n
    for (int i = 1; i <= n; ++i) {
        cout << p[i] << (i == n ? "" : " ");
    }
    cout << "\n";
}

int main() {
    // Tối ưu hóa I/O cho luồng dữ liệu lớn
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int t;
    if (cin >> t) {
        while (t--) {
            solve();
        }
    }
    return 0;
}