#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX 100010 #define X first #define Y second #define LB(x) ((x) & -(x)) using namespace std; typedef long long i64; typedef pair Pii; int a[MAX], ans[MAX]; struct BIT { int c[MAX], sz; void Init(int n) { memset(c, 0, sizeof(c)); sz = n; } void Update(int k, int v) { for (; k <= sz; k += LB(k)) { c[k] += v; } } int Query(int k) const { int ret = 0; for (; k; k -= LB(k)) { ret += c[k]; } return ret; } } bit; int Query(int n, int k) { int low = 0, high = n, ret = -1; while (low <= high) { int mid = (low + high) >> 1; if (bit.Query(mid) >= k) { ret = mid; high = mid - 1; } else { low = mid + 1; } } return ret; } void Solve(int n) { for (int i = n - 1; i; --i) { a[i] -= a[i - 1]; } bit.Init(n); for (int i = 1; i <= n; ++i) { bit.Update(i, 1); } for (int i = n - 1; ~i; --i) { ans[i] = Query(n, i + 1 - a[i]); bit.Update(ans[i], -1); } } int main() { int t, n; scanf("%d", &t); while (t--) { scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); } Solve(n); for (int i = 0; i < n; ++i) { printf("%d%c", ans[i], i < n - 1 ? ' ' : '\n'); } } return 0; }