t = int(input())
for _ in range(t):
n = int(input())
b = list(map(int, input().split()))
ib = sorted((b[i], i) for i in range(n))
if ib[0][0] != 0:
print(-1)
continue
blocks = []
curr_val = ib[0][0]
curr_indices = [ib[0][1]]
for i in range(1, n):
if ib[i][0] == curr_val:
curr_indices.append(ib[i][1])
else:
blocks.append((curr_val, curr_indices))
curr_val = ib[i][0]
curr_indices = [ib[i][1]]
blocks.append((curr_val, curr_indices))
ans_a = [0] * n
possible = True
num_blocks = len(blocks)
for i in range(num_blocks - 1):
diff_b = blocks[i+1][0] - blocks[i][0]
count_curr = len(blocks[i][1])
if diff_b % count_curr != 0:
possible = False
break
val_a = diff_b // count_curr
if val_a <= 0:
possible = False
break
if i > 0 and val_a <= ans_a[blocks[i-1][1][0]]:
possible = False
break
for idx in blocks[i][1]:
ans_a[idx] = val_a
if possible:
if num_blocks == 1:
last_val_a = 1
else:
last_val_a = ans_a[blocks[-2][1][0]] + 1
for idx in blocks[-1][1]:
ans_a[idx] = last_val_a
if not possible:
print(-1)
else:
print(*(ans_a))
dCA9IGludChpbnB1dCgpKQpmb3IgXyBpbiByYW5nZSh0KToKICAgIG4gPSBpbnQoaW5wdXQoKSkKICAgIGIgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCiAgICAKICAgIGliID0gc29ydGVkKChiW2ldLCBpKSBmb3IgaSBpbiByYW5nZShuKSkKICAgIAogICAgaWYgaWJbMF1bMF0gIT0gMDoKICAgICAgICBwcmludCgtMSkKICAgICAgICBjb250aW51ZQogICAgICAgIAogICAgYmxvY2tzID0gW10KICAgIGN1cnJfdmFsID0gaWJbMF1bMF0KICAgIGN1cnJfaW5kaWNlcyA9IFtpYlswXVsxXV0KICAgIAogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbik6CiAgICAgICAgaWYgaWJbaV1bMF0gPT0gY3Vycl92YWw6CiAgICAgICAgICAgIGN1cnJfaW5kaWNlcy5hcHBlbmQoaWJbaV1bMV0pCiAgICAgICAgZWxzZToKICAgICAgICAgICAgYmxvY2tzLmFwcGVuZCgoY3Vycl92YWwsIGN1cnJfaW5kaWNlcykpCiAgICAgICAgICAgIGN1cnJfdmFsID0gaWJbaV1bMF0KICAgICAgICAgICAgY3Vycl9pbmRpY2VzID0gW2liW2ldWzFdXQogICAgYmxvY2tzLmFwcGVuZCgoY3Vycl92YWwsIGN1cnJfaW5kaWNlcykpCiAgICAKICAgIGFuc19hID0gWzBdICogbgogICAgcG9zc2libGUgPSBUcnVlCiAgICBudW1fYmxvY2tzID0gbGVuKGJsb2NrcykKICAgIAogICAgZm9yIGkgaW4gcmFuZ2UobnVtX2Jsb2NrcyAtIDEpOgogICAgICAgIGRpZmZfYiA9IGJsb2Nrc1tpKzFdWzBdIC0gYmxvY2tzW2ldWzBdCiAgICAgICAgY291bnRfY3VyciA9IGxlbihibG9ja3NbaV1bMV0pCiAgICAgICAgCiAgICAgICAgaWYgZGlmZl9iICUgY291bnRfY3VyciAhPSAwOgogICAgICAgICAgICBwb3NzaWJsZSA9IEZhbHNlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIAogICAgICAgIHZhbF9hID0gZGlmZl9iIC8vIGNvdW50X2N1cnIKICAgICAgICBpZiB2YWxfYSA8PSAwOgogICAgICAgICAgICBwb3NzaWJsZSA9IEZhbHNlCiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIAogICAgICAgIGlmIGkgPiAwIGFuZCB2YWxfYSA8PSBhbnNfYVtibG9ja3NbaS0xXVsxXVswXV06CiAgICAgICAgICAgIHBvc3NpYmxlID0gRmFsc2UKICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgCiAgICAgICAgZm9yIGlkeCBpbiBibG9ja3NbaV1bMV06CiAgICAgICAgICAgIGFuc19hW2lkeF0gPSB2YWxfYQogICAgICAgICAgICAKICAgIGlmIHBvc3NpYmxlOgogICAgICAgIGlmIG51bV9ibG9ja3MgPT0gMToKICAgICAgICAgICAgbGFzdF92YWxfYSA9IDEKICAgICAgICBlbHNlOgogICAgICAgICAgICBsYXN0X3ZhbF9hID0gYW5zX2FbYmxvY2tzWy0yXVsxXVswXV0gKyAxCiAgICAgICAgICAgIAogICAgICAgIGZvciBpZHggaW4gYmxvY2tzWy0xXVsxXToKICAgICAgICAgICAgYW5zX2FbaWR4XSA9IGxhc3RfdmFsX2EKICAgICAgICAgICAgCiAgICBpZiBub3QgcG9zc2libGU6CiAgICAgICAgcHJpbnQoLTEpCiAgICBlbHNlOgogICAgICAgIHByaW50KCooYW5zX2EpKQ==